<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><link rel="stylesheet" type="text/css" href="style.css" /><script type="text/javascript" src="highlight.js"></script></head><body><pre><span class="hs-pragma">{-# LANGUAGE BangPatterns, GADTs #-}</span><span>
</span><span id="line-2"></span><span>
</span><span id="line-3"></span><span class="hs-keyword">module</span><span> </span><span class="hs-identifier">GHC.Cmm.Graph</span><span>
</span><span id="line-4"></span><span>  </span><span class="hs-special">(</span><span> </span><span class="annot"><a href="GHC.Cmm.Graph.html#CmmAGraph"><span class="hs-identifier">CmmAGraph</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><a href="GHC.Cmm.Graph.html#CmmAGraphScoped"><span class="hs-identifier">CmmAGraphScoped</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><a href="GHC.Cmm.Graph.html#CgStmt"><span class="hs-identifier">CgStmt</span></a></span><span class="hs-special">(</span><span class="hs-glyph">..</span><span class="hs-special">)</span><span>
</span><span id="line-5"></span><span>  </span><span class="hs-special">,</span><span> </span><span class="annot"><a href="GHC.Cmm.Graph.html#%3C%2A%3E"><span class="hs-operator">(&lt;*&gt;)</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><a href="GHC.Cmm.Graph.html#catAGraphs"><span class="hs-identifier">catAGraphs</span></a></span><span>
</span><span id="line-6"></span><span>  </span><span class="hs-special">,</span><span> </span><span class="annot"><a href="GHC.Cmm.Graph.html#mkLabel"><span class="hs-identifier">mkLabel</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><a href="GHC.Cmm.Graph.html#mkMiddle"><span class="hs-identifier">mkMiddle</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><a href="GHC.Cmm.Graph.html#mkLast"><span class="hs-identifier">mkLast</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><a href="GHC.Cmm.Graph.html#outOfLine"><span class="hs-identifier">outOfLine</span></a></span><span>
</span><span id="line-7"></span><span>  </span><span class="hs-special">,</span><span> </span><span class="annot"><a href="GHC.Cmm.Graph.html#lgraphOfAGraph"><span class="hs-identifier">lgraphOfAGraph</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><a href="GHC.Cmm.Graph.html#labelAGraph"><span class="hs-identifier">labelAGraph</span></a></span><span>
</span><span id="line-8"></span><span>
</span><span id="line-9"></span><span>  </span><span class="hs-special">,</span><span> </span><span class="annot"><a href="GHC.Cmm.Graph.html#stackStubExpr"><span class="hs-identifier">stackStubExpr</span></a></span><span>
</span><span id="line-10"></span><span>  </span><span class="hs-special">,</span><span> </span><span class="annot"><a href="GHC.Cmm.Graph.html#mkNop"><span class="hs-identifier">mkNop</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><a href="GHC.Cmm.Graph.html#mkAssign"><span class="hs-identifier">mkAssign</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><a href="GHC.Cmm.Graph.html#mkStore"><span class="hs-identifier">mkStore</span></a></span><span>
</span><span id="line-11"></span><span>  </span><span class="hs-special">,</span><span> </span><span class="annot"><a href="GHC.Cmm.Graph.html#mkUnsafeCall"><span class="hs-identifier">mkUnsafeCall</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><a href="GHC.Cmm.Graph.html#mkFinalCall"><span class="hs-identifier">mkFinalCall</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><a href="GHC.Cmm.Graph.html#mkCallReturnsTo"><span class="hs-identifier">mkCallReturnsTo</span></a></span><span>
</span><span id="line-12"></span><span>  </span><span class="hs-special">,</span><span> </span><span class="annot"><a href="GHC.Cmm.Graph.html#mkJumpReturnsTo"><span class="hs-identifier">mkJumpReturnsTo</span></a></span><span>
</span><span id="line-13"></span><span>  </span><span class="hs-special">,</span><span> </span><span class="annot"><a href="GHC.Cmm.Graph.html#mkJump"><span class="hs-identifier">mkJump</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><a href="GHC.Cmm.Graph.html#mkJumpExtra"><span class="hs-identifier">mkJumpExtra</span></a></span><span>
</span><span id="line-14"></span><span>  </span><span class="hs-special">,</span><span> </span><span class="annot"><a href="GHC.Cmm.Graph.html#mkRawJump"><span class="hs-identifier">mkRawJump</span></a></span><span>
</span><span id="line-15"></span><span>  </span><span class="hs-special">,</span><span> </span><span class="annot"><a href="GHC.Cmm.Graph.html#mkCbranch"><span class="hs-identifier">mkCbranch</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><a href="GHC.Cmm.Graph.html#mkSwitch"><span class="hs-identifier">mkSwitch</span></a></span><span>
</span><span id="line-16"></span><span>  </span><span class="hs-special">,</span><span> </span><span class="annot"><a href="GHC.Cmm.Graph.html#mkReturn"><span class="hs-identifier">mkReturn</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><a href="GHC.Cmm.Graph.html#mkComment"><span class="hs-identifier">mkComment</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><a href="GHC.Cmm.Graph.html#mkCallEntry"><span class="hs-identifier">mkCallEntry</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><a href="GHC.Cmm.Graph.html#mkBranch"><span class="hs-identifier">mkBranch</span></a></span><span>
</span><span id="line-17"></span><span>  </span><span class="hs-special">,</span><span> </span><span class="annot"><a href="GHC.Cmm.Graph.html#mkUnwind"><span class="hs-identifier">mkUnwind</span></a></span><span>
</span><span id="line-18"></span><span>  </span><span class="hs-special">,</span><span> </span><span class="annot"><a href="GHC.Cmm.Graph.html#copyInOflow"><span class="hs-identifier">copyInOflow</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><a href="GHC.Cmm.Graph.html#copyOutOflow"><span class="hs-identifier">copyOutOflow</span></a></span><span>
</span><span id="line-19"></span><span>  </span><span class="hs-special">,</span><span> </span><span class="annot"><a href="GHC.Cmm.Graph.html#noExtraStack"><span class="hs-identifier">noExtraStack</span></a></span><span>
</span><span id="line-20"></span><span>  </span><span class="hs-special">,</span><span> </span><span class="annot"><a href="GHC.Cmm.Graph.html#toCall"><span class="hs-identifier">toCall</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><a href="GHC.Cmm.Graph.html#Transfer"><span class="hs-identifier">Transfer</span></a></span><span class="hs-special">(</span><span class="hs-glyph">..</span><span class="hs-special">)</span><span>
</span><span id="line-21"></span><span>  </span><span class="hs-special">)</span><span>
</span><span id="line-22"></span><span class="hs-keyword">where</span><span>
</span><span id="line-23"></span><span>
</span><span id="line-24"></span><span class="hs-keyword">import</span><span> </span><span class="annot"><a href="GHC.Prelude.html"><span class="hs-identifier">GHC.Prelude</span></a></span><span> </span><span class="hs-keyword">hiding</span><span> </span><span class="hs-special">(</span><span> </span><span class="annot"><a href="../../base/src/GHC.Base.html#%3C%2A%3E"><span class="hs-operator">(&lt;*&gt;)</span></a></span><span> </span><span class="hs-special">)</span><span> </span><span class="hs-comment">-- avoid importing (&lt;*&gt;)</span><span>
</span><span id="line-25"></span><span>
</span><span id="line-26"></span><span class="hs-keyword">import</span><span> </span><span class="annot"><a href="GHC.Cmm.BlockId.html"><span class="hs-identifier">GHC.Cmm.BlockId</span></a></span><span>
</span><span id="line-27"></span><span class="hs-keyword">import</span><span> </span><span class="annot"><a href="GHC.Cmm.html"><span class="hs-identifier">GHC.Cmm</span></a></span><span>
</span><span id="line-28"></span><span class="hs-keyword">import</span><span> </span><span class="annot"><a href="GHC.Cmm.CallConv.html"><span class="hs-identifier">GHC.Cmm.CallConv</span></a></span><span>
</span><span id="line-29"></span><span class="hs-keyword">import</span><span> </span><span class="annot"><a href="GHC.Cmm.Switch.html"><span class="hs-identifier">GHC.Cmm.Switch</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.Cmm.Switch.html#SwitchTargets"><span class="hs-identifier">SwitchTargets</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-30"></span><span>
</span><span id="line-31"></span><span class="hs-keyword">import</span><span> </span><span class="annot"><a href="GHC.Cmm.Dataflow.Block.html"><span class="hs-identifier">GHC.Cmm.Dataflow.Block</span></a></span><span>
</span><span id="line-32"></span><span class="hs-keyword">import</span><span> </span><span class="annot"><a href="GHC.Cmm.Dataflow.Graph.html"><span class="hs-identifier">GHC.Cmm.Dataflow.Graph</span></a></span><span>
</span><span id="line-33"></span><span class="hs-keyword">import</span><span> </span><span class="annot"><a href="GHC.Cmm.Dataflow.Label.html"><span class="hs-identifier">GHC.Cmm.Dataflow.Label</span></a></span><span>
</span><span id="line-34"></span><span class="hs-keyword">import</span><span> </span><span class="annot"><a href="GHC.Driver.Session.html"><span class="hs-identifier">GHC.Driver.Session</span></a></span><span>
</span><span id="line-35"></span><span class="hs-keyword">import</span><span> </span><span class="annot"><a href="GHC.Data.FastString.html"><span class="hs-identifier">GHC.Data.FastString</span></a></span><span>
</span><span id="line-36"></span><span class="hs-keyword">import</span><span> </span><span class="annot"><a href="GHC.Types.ForeignCall.html"><span class="hs-identifier">GHC.Types.ForeignCall</span></a></span><span>
</span><span id="line-37"></span><span class="hs-keyword">import</span><span> </span><span class="annot"><a href="GHC.Data.OrdList.html"><span class="hs-identifier">GHC.Data.OrdList</span></a></span><span>
</span><span id="line-38"></span><span class="hs-keyword">import</span><span> </span><span class="annot"><a href="GHC.Runtime.Heap.Layout.html"><span class="hs-identifier">GHC.Runtime.Heap.Layout</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.Runtime.Heap.Layout.html#ByteOff"><span class="hs-identifier">ByteOff</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-39"></span><span class="hs-keyword">import</span><span> </span><span class="annot"><a href="GHC.Types.Unique.Supply.html"><span class="hs-identifier">GHC.Types.Unique.Supply</span></a></span><span>
</span><span id="line-40"></span><span class="hs-keyword">import</span><span> </span><span class="annot"><a href="GHC.Utils.Misc.html"><span class="hs-identifier">GHC.Utils.Misc</span></a></span><span>
</span><span id="line-41"></span><span class="hs-keyword">import</span><span> </span><span class="annot"><a href="GHC.Utils.Panic.html"><span class="hs-identifier">GHC.Utils.Panic</span></a></span><span>
</span><span id="line-42"></span><span>
</span><span id="line-43"></span><span>
</span><span id="line-44"></span><span class="hs-comment">-----------------------------------------------------------------------------</span><span>
</span><span id="line-45"></span><span class="hs-comment">-- Building Graphs</span><span>
</span><span id="line-46"></span><span>
</span><span id="line-47"></span><span>
</span><span id="line-48"></span><span class="hs-comment">-- | CmmAGraph is a chunk of code consisting of:</span><span>
</span><span id="line-49"></span><span class="hs-comment">--</span><span>
</span><span id="line-50"></span><span class="hs-comment">--   * ordinary statements (assignments, stores etc.)</span><span>
</span><span id="line-51"></span><span class="hs-comment">--   * jumps</span><span>
</span><span id="line-52"></span><span class="hs-comment">--   * labels</span><span>
</span><span id="line-53"></span><span class="hs-comment">--   * out-of-line labelled blocks</span><span>
</span><span id="line-54"></span><span class="hs-comment">--</span><span>
</span><span id="line-55"></span><span class="hs-comment">-- The semantics is that control falls through labels and out-of-line</span><span>
</span><span id="line-56"></span><span class="hs-comment">-- blocks.  Everything after a jump up to the next label is by</span><span>
</span><span id="line-57"></span><span class="hs-comment">-- definition unreachable code, and will be discarded.</span><span>
</span><span id="line-58"></span><span class="hs-comment">--</span><span>
</span><span id="line-59"></span><span class="hs-comment">-- Two CmmAGraphs can be stuck together with &lt;*&gt;, with the meaning that</span><span>
</span><span id="line-60"></span><span class="hs-comment">-- control flows from the first to the second.</span><span>
</span><span id="line-61"></span><span class="hs-comment">--</span><span>
</span><span id="line-62"></span><span class="hs-comment">-- A 'CmmAGraph' can be turned into a 'CmmGraph' (closed at both ends)</span><span>
</span><span id="line-63"></span><span class="hs-comment">-- by providing a label for the entry point and a tick scope; see</span><span>
</span><span id="line-64"></span><span class="hs-comment">-- 'labelAGraph'.</span><span>
</span><span id="line-65"></span><span class="hs-keyword">type</span><span> </span><span id="CmmAGraph"><span class="annot"><a href="GHC.Cmm.Graph.html#CmmAGraph"><span class="hs-identifier hs-var">CmmAGraph</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><a href="GHC.Data.OrdList.html#OrdList"><span class="hs-identifier hs-type">OrdList</span></a></span><span> </span><span class="annot"><a href="GHC.Cmm.Graph.html#CgStmt"><span class="hs-identifier hs-type">CgStmt</span></a></span><span>
</span><span id="line-66"></span><span class="hs-comment">-- | Unlabeled graph with tick scope</span><span>
</span><span id="line-67"></span><span class="hs-keyword">type</span><span> </span><span id="CmmAGraphScoped"><span class="annot"><a href="GHC.Cmm.Graph.html#CmmAGraphScoped"><span class="hs-identifier hs-var">CmmAGraphScoped</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.Cmm.Graph.html#CmmAGraph"><span class="hs-identifier hs-type">CmmAGraph</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><a href="GHC.Cmm.Node.html#CmmTickScope"><span class="hs-identifier hs-type">CmmTickScope</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-68"></span><span>
</span><span id="line-69"></span><span class="hs-keyword">data</span><span> </span><span id="CgStmt"><span class="annot"><a href="GHC.Cmm.Graph.html#CgStmt"><span class="hs-identifier hs-var">CgStmt</span></a></span></span><span>
</span><span id="line-70"></span><span>  </span><span class="hs-glyph">=</span><span> </span><span id="CgLabel"><span class="annot"><a href="GHC.Cmm.Graph.html#CgLabel"><span class="hs-identifier hs-var">CgLabel</span></a></span></span><span> </span><span class="annot"><a href="GHC.Cmm.BlockId.html#BlockId"><span class="hs-identifier hs-type">BlockId</span></a></span><span> </span><span class="annot"><a href="GHC.Cmm.Node.html#CmmTickScope"><span class="hs-identifier hs-type">CmmTickScope</span></a></span><span>
</span><span id="line-71"></span><span>  </span><span class="hs-glyph">|</span><span> </span><span id="CgStmt"><span class="annot"><a href="GHC.Cmm.Graph.html#CgStmt"><span class="hs-identifier hs-var">CgStmt</span></a></span></span><span>  </span><span class="hs-special">(</span><span class="annot"><a href="GHC.Cmm.Node.html#CmmNode"><span class="hs-identifier hs-type">CmmNode</span></a></span><span> </span><span class="annot"><a href="GHC.Cmm.Dataflow.Block.html#O"><span class="hs-identifier hs-type">O</span></a></span><span> </span><span class="annot"><a href="GHC.Cmm.Dataflow.Block.html#O"><span class="hs-identifier hs-type">O</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-72"></span><span>  </span><span class="hs-glyph">|</span><span> </span><span id="CgLast"><span class="annot"><a href="GHC.Cmm.Graph.html#CgLast"><span class="hs-identifier hs-var">CgLast</span></a></span></span><span>  </span><span class="hs-special">(</span><span class="annot"><a href="GHC.Cmm.Node.html#CmmNode"><span class="hs-identifier hs-type">CmmNode</span></a></span><span> </span><span class="annot"><a href="GHC.Cmm.Dataflow.Block.html#O"><span class="hs-identifier hs-type">O</span></a></span><span> </span><span class="annot"><a href="GHC.Cmm.Dataflow.Block.html#C"><span class="hs-identifier hs-type">C</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-73"></span><span>  </span><span class="hs-glyph">|</span><span> </span><span id="CgFork"><span class="annot"><a href="GHC.Cmm.Graph.html#CgFork"><span class="hs-identifier hs-var">CgFork</span></a></span></span><span>  </span><span class="annot"><a href="GHC.Cmm.BlockId.html#BlockId"><span class="hs-identifier hs-type">BlockId</span></a></span><span> </span><span class="annot"><a href="GHC.Cmm.Graph.html#CmmAGraph"><span class="hs-identifier hs-type">CmmAGraph</span></a></span><span> </span><span class="annot"><a href="GHC.Cmm.Node.html#CmmTickScope"><span class="hs-identifier hs-type">CmmTickScope</span></a></span><span>
</span><span id="line-74"></span><span>
</span><span id="line-75"></span><span class="annot"><a href="GHC.Cmm.Graph.html#flattenCmmAGraph"><span class="hs-identifier hs-type">flattenCmmAGraph</span></a></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="GHC.Cmm.BlockId.html#BlockId"><span class="hs-identifier hs-type">BlockId</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Cmm.Graph.html#CmmAGraphScoped"><span class="hs-identifier hs-type">CmmAGraphScoped</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Cmm.html#CmmGraph"><span class="hs-identifier hs-type">CmmGraph</span></a></span><span>
</span><span id="line-76"></span><span id="flattenCmmAGraph"><span class="annot"><span class="annottext">flattenCmmAGraph :: BlockId -&gt; CmmAGraphScoped -&gt; CmmGraph
</span><a href="GHC.Cmm.Graph.html#flattenCmmAGraph"><span class="hs-identifier hs-var hs-var">flattenCmmAGraph</span></a></span></span><span> </span><span id="local-6989586621681049751"><span class="annot"><span class="annottext">BlockId
</span><a href="#local-6989586621681049751"><span class="hs-identifier hs-var">id</span></a></span></span><span> </span><span class="hs-special">(</span><span id="local-6989586621681049750"><span class="annot"><span class="annottext">CmmAGraph
</span><a href="#local-6989586621681049750"><span class="hs-identifier hs-var">stmts_t</span></a></span></span><span class="hs-special">,</span><span> </span><span id="local-6989586621681049749"><span class="annot"><span class="annottext">CmmTickScope
</span><a href="#local-6989586621681049749"><span class="hs-identifier hs-var">tscope</span></a></span></span><span class="hs-special">)</span><span> </span><span class="hs-glyph">=</span><span>
</span><span id="line-77"></span><span>    </span><span class="annot"><span class="annottext">CmmGraph :: forall (n :: Extensibility -&gt; Extensibility -&gt; *).
BlockId -&gt; Graph n C C -&gt; GenCmmGraph n
</span><a href="GHC.Cmm.html#CmmGraph"><span class="hs-identifier hs-type">CmmGraph</span></a></span><span> </span><span class="hs-special">{</span><span> </span><span class="annot"><span class="annottext">g_entry :: BlockId
</span><a href="GHC.Cmm.html#g_entry"><span class="hs-identifier hs-var">g_entry</span></a></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">BlockId
</span><a href="#local-6989586621681049751"><span class="hs-identifier hs-var">id</span></a></span><span class="hs-special">,</span><span>
</span><span id="line-78"></span><span>               </span><span class="annot"><span class="annottext">g_graph :: Graph CmmNode C C
</span><a href="GHC.Cmm.html#g_graph"><span class="hs-identifier hs-var">g_graph</span></a></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">MaybeO C (Block CmmNode O C)
-&gt; Body' Block CmmNode
-&gt; MaybeO C (Block CmmNode C O)
-&gt; Graph CmmNode C C
forall (e :: Extensibility)
       (block :: (Extensibility -&gt; Extensibility -&gt; *)
                 -&gt; Extensibility -&gt; Extensibility -&gt; *)
       (n :: Extensibility -&gt; Extensibility -&gt; *) (x :: Extensibility).
MaybeO e (block n O C)
-&gt; Body' block n -&gt; MaybeO x (block n C O) -&gt; Graph' block n e x
</span><a href="GHC.Cmm.Dataflow.Graph.html#GMany"><span class="hs-identifier hs-var">GMany</span></a></span><span> </span><span class="annot"><span class="annottext">MaybeO C (Block CmmNode O C)
forall t. MaybeO C t
</span><a href="GHC.Cmm.Dataflow.Block.html#NothingO"><span class="hs-identifier hs-var">NothingO</span></a></span><span> </span><span class="annot"><span class="annottext">Body' Block CmmNode
</span><a href="#local-6989586621681049743"><span class="hs-identifier hs-var">body</span></a></span><span> </span><span class="annot"><span class="annottext">MaybeO C (Block CmmNode C O)
forall t. MaybeO C t
</span><a href="GHC.Cmm.Dataflow.Block.html#NothingO"><span class="hs-identifier hs-var">NothingO</span></a></span><span> </span><span class="hs-special">}</span><span>
</span><span id="line-79"></span><span>  </span><span class="hs-keyword">where</span><span>
</span><span id="line-80"></span><span>  </span><span id="local-6989586621681049743"><span class="annot"><span class="annottext">body :: Body' Block CmmNode
</span><a href="#local-6989586621681049743"><span class="hs-identifier hs-var hs-var">body</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">(Block CmmNode C C -&gt; Body' Block CmmNode -&gt; Body' Block CmmNode)
-&gt; Body' Block CmmNode
-&gt; [Block CmmNode C C]
-&gt; Body' Block CmmNode
forall (t :: * -&gt; *) a b.
Foldable t =&gt;
(a -&gt; b -&gt; b) -&gt; b -&gt; t a -&gt; b
</span><a href="../../base/src/Data.Foldable.html#foldr"><span class="hs-identifier hs-var">foldr</span></a></span><span> </span><span class="annot"><span class="annottext">Block CmmNode C C -&gt; Body' Block CmmNode -&gt; Body' Block CmmNode
forall (block :: Extensibility -&gt; Extensibility -&gt; *).
(NonLocal block, HasDebugCallStack) =&gt;
block C C -&gt; LabelMap (block C C) -&gt; LabelMap (block C C)
</span><a href="GHC.Cmm.Dataflow.Graph.html#addBlock"><span class="hs-identifier hs-var">addBlock</span></a></span><span> </span><span class="annot"><span class="annottext">Body' Block CmmNode
forall (block :: (Extensibility -&gt; Extensibility -&gt; *)
                 -&gt; Extensibility -&gt; Extensibility -&gt; *)
       (n :: Extensibility -&gt; Extensibility -&gt; *).
Body' block n
</span><a href="GHC.Cmm.Dataflow.Graph.html#emptyBody"><span class="hs-identifier hs-var">emptyBody</span></a></span><span> </span><span class="annot"><span class="annottext">([Block CmmNode C C] -&gt; Body' Block CmmNode)
-&gt; [Block CmmNode C C] -&gt; Body' Block CmmNode
forall a b. (a -&gt; b) -&gt; a -&gt; b
</span><a href="../../base/src/GHC.Base.html#%24"><span class="hs-operator hs-var">$</span></a></span><span> </span><span class="annot"><span class="annottext">BlockId
-&gt; CmmAGraph
-&gt; CmmTickScope
-&gt; [Block CmmNode C C]
-&gt; [Block CmmNode C C]
</span><a href="#local-6989586621681049739"><span class="hs-identifier hs-var">flatten</span></a></span><span> </span><span class="annot"><span class="annottext">BlockId
</span><a href="#local-6989586621681049751"><span class="hs-identifier hs-var">id</span></a></span><span> </span><span class="annot"><span class="annottext">CmmAGraph
</span><a href="#local-6989586621681049750"><span class="hs-identifier hs-var">stmts_t</span></a></span><span> </span><span class="annot"><span class="annottext">CmmTickScope
</span><a href="#local-6989586621681049749"><span class="hs-identifier hs-var">tscope</span></a></span><span> </span><span class="hs-special">[</span><span class="hs-special">]</span><span>
</span><span id="line-81"></span><span>
</span><span id="line-82"></span><span>  </span><span class="hs-comment">--</span><span>
</span><span id="line-83"></span><span>  </span><span class="hs-comment">-- flatten: given an entry label and a CmmAGraph, make a list of blocks.</span><span>
</span><span id="line-84"></span><span>  </span><span class="hs-comment">--</span><span>
</span><span id="line-85"></span><span>  </span><span class="hs-comment">-- NB. avoid the quadratic-append trap by passing in the tail of the</span><span>
</span><span id="line-86"></span><span>  </span><span class="hs-comment">-- list.  This is important for Very Long Functions (e.g. in T783).</span><span>
</span><span id="line-87"></span><span>  </span><span class="hs-comment">--</span><span>
</span><span id="line-88"></span><span>  </span><span class="annot"><a href="#local-6989586621681049739"><span class="hs-identifier hs-type">flatten</span></a></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="GHC.Cmm.Dataflow.Label.html#Label"><span class="hs-identifier hs-type">Label</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Cmm.Graph.html#CmmAGraph"><span class="hs-identifier hs-type">CmmAGraph</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Cmm.Node.html#CmmTickScope"><span class="hs-identifier hs-type">CmmTickScope</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="hs-special">[</span><span class="annot"><a href="GHC.Cmm.Dataflow.Block.html#Block"><span class="hs-identifier hs-type">Block</span></a></span><span> </span><span class="annot"><a href="GHC.Cmm.Node.html#CmmNode"><span class="hs-identifier hs-type">CmmNode</span></a></span><span> </span><span class="annot"><a href="GHC.Cmm.Dataflow.Block.html#C"><span class="hs-identifier hs-type">C</span></a></span><span> </span><span class="annot"><a href="GHC.Cmm.Dataflow.Block.html#C"><span class="hs-identifier hs-type">C</span></a></span><span class="hs-special">]</span><span>
</span><span id="line-89"></span><span>          </span><span class="hs-glyph">-&gt;</span><span> </span><span class="hs-special">[</span><span class="annot"><a href="GHC.Cmm.Dataflow.Block.html#Block"><span class="hs-identifier hs-type">Block</span></a></span><span> </span><span class="annot"><a href="GHC.Cmm.Node.html#CmmNode"><span class="hs-identifier hs-type">CmmNode</span></a></span><span> </span><span class="annot"><a href="GHC.Cmm.Dataflow.Block.html#C"><span class="hs-identifier hs-type">C</span></a></span><span> </span><span class="annot"><a href="GHC.Cmm.Dataflow.Block.html#C"><span class="hs-identifier hs-type">C</span></a></span><span class="hs-special">]</span><span>
</span><span id="line-90"></span><span>  </span><span id="local-6989586621681049739"><span class="annot"><span class="annottext">flatten :: BlockId
-&gt; CmmAGraph
-&gt; CmmTickScope
-&gt; [Block CmmNode C C]
-&gt; [Block CmmNode C C]
</span><a href="#local-6989586621681049739"><span class="hs-identifier hs-var hs-var">flatten</span></a></span></span><span> </span><span id="local-6989586621681049737"><span class="annot"><span class="annottext">BlockId
</span><a href="#local-6989586621681049737"><span class="hs-identifier hs-var">id</span></a></span></span><span> </span><span id="local-6989586621681049736"><span class="annot"><span class="annottext">CmmAGraph
</span><a href="#local-6989586621681049736"><span class="hs-identifier hs-var">g</span></a></span></span><span> </span><span id="local-6989586621681049735"><span class="annot"><span class="annottext">CmmTickScope
</span><a href="#local-6989586621681049735"><span class="hs-identifier hs-var">tscope</span></a></span></span><span> </span><span id="local-6989586621681049734"><span class="annot"><span class="annottext">[Block CmmNode C C]
</span><a href="#local-6989586621681049734"><span class="hs-identifier hs-var">blocks</span></a></span></span><span>
</span><span id="line-91"></span><span>      </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">[CgStmt]
-&gt; Block CmmNode C O -&gt; [Block CmmNode C C] -&gt; [Block CmmNode C C]
</span><a href="#local-6989586621681049733"><span class="hs-identifier hs-var">flatten1</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">CmmAGraph -&gt; [CgStmt]
forall a. OrdList a -&gt; [a]
</span><a href="GHC.Data.OrdList.html#fromOL"><span class="hs-identifier hs-var">fromOL</span></a></span><span> </span><span class="annot"><span class="annottext">CmmAGraph
</span><a href="#local-6989586621681049736"><span class="hs-identifier hs-var">g</span></a></span><span class="hs-special">)</span><span> </span><span class="annot"><span class="annottext">Block CmmNode C O
</span><a href="#local-6989586621681049731"><span class="hs-identifier hs-var">block'</span></a></span><span> </span><span class="annot"><span class="annottext">[Block CmmNode C C]
</span><a href="#local-6989586621681049734"><span class="hs-identifier hs-var">blocks</span></a></span><span>
</span><span id="line-92"></span><span>      </span><span class="hs-keyword">where</span><span> </span><span class="hs-glyph">!</span><span id="local-6989586621681049731"><span class="annot"><span class="annottext">block' :: Block CmmNode C O
</span><a href="#local-6989586621681049731"><span class="hs-identifier hs-var hs-var">block'</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">CmmNode C O -&gt; Block CmmNode O O -&gt; Block CmmNode C O
forall (n :: Extensibility -&gt; Extensibility -&gt; *)
       (x :: Extensibility).
n C O -&gt; Block n O x -&gt; Block n C x
</span><a href="GHC.Cmm.Dataflow.Block.html#blockJoinHead"><span class="hs-identifier hs-var">blockJoinHead</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">BlockId -&gt; CmmTickScope -&gt; CmmNode C O
</span><a href="GHC.Cmm.Node.html#CmmEntry"><span class="hs-identifier hs-var">CmmEntry</span></a></span><span> </span><span class="annot"><span class="annottext">BlockId
</span><a href="#local-6989586621681049737"><span class="hs-identifier hs-var">id</span></a></span><span> </span><span class="annot"><span class="annottext">CmmTickScope
</span><a href="#local-6989586621681049735"><span class="hs-identifier hs-var">tscope</span></a></span><span class="hs-special">)</span><span> </span><span class="annot"><span class="annottext">Block CmmNode O O
forall (n :: Extensibility -&gt; Extensibility -&gt; *). Block n O O
</span><a href="GHC.Cmm.Dataflow.Block.html#emptyBlock"><span class="hs-identifier hs-var">emptyBlock</span></a></span><span>
</span><span id="line-93"></span><span>  </span><span class="hs-comment">--</span><span>
</span><span id="line-94"></span><span>  </span><span class="hs-comment">-- flatten0: we are outside a block at this point: any code before</span><span>
</span><span id="line-95"></span><span>  </span><span class="hs-comment">-- the first label is unreachable, so just drop it.</span><span>
</span><span id="line-96"></span><span>  </span><span class="hs-comment">--</span><span>
</span><span id="line-97"></span><span>  </span><span class="annot"><a href="#local-6989586621681049727"><span class="hs-identifier hs-type">flatten0</span></a></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="hs-special">[</span><span class="annot"><a href="GHC.Cmm.Graph.html#CgStmt"><span class="hs-identifier hs-type">CgStmt</span></a></span><span class="hs-special">]</span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="hs-special">[</span><span class="annot"><a href="GHC.Cmm.Dataflow.Block.html#Block"><span class="hs-identifier hs-type">Block</span></a></span><span> </span><span class="annot"><a href="GHC.Cmm.Node.html#CmmNode"><span class="hs-identifier hs-type">CmmNode</span></a></span><span> </span><span class="annot"><a href="GHC.Cmm.Dataflow.Block.html#C"><span class="hs-identifier hs-type">C</span></a></span><span> </span><span class="annot"><a href="GHC.Cmm.Dataflow.Block.html#C"><span class="hs-identifier hs-type">C</span></a></span><span class="hs-special">]</span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="hs-special">[</span><span class="annot"><a href="GHC.Cmm.Dataflow.Block.html#Block"><span class="hs-identifier hs-type">Block</span></a></span><span> </span><span class="annot"><a href="GHC.Cmm.Node.html#CmmNode"><span class="hs-identifier hs-type">CmmNode</span></a></span><span> </span><span class="annot"><a href="GHC.Cmm.Dataflow.Block.html#C"><span class="hs-identifier hs-type">C</span></a></span><span> </span><span class="annot"><a href="GHC.Cmm.Dataflow.Block.html#C"><span class="hs-identifier hs-type">C</span></a></span><span class="hs-special">]</span><span>
</span><span id="line-98"></span><span>  </span><span id="local-6989586621681049727"><span class="annot"><span class="annottext">flatten0 :: [CgStmt] -&gt; [Block CmmNode C C] -&gt; [Block CmmNode C C]
</span><a href="#local-6989586621681049727"><span class="hs-identifier hs-var hs-var">flatten0</span></a></span></span><span> </span><span class="hs-special">[</span><span class="hs-special">]</span><span> </span><span id="local-6989586621681049726"><span class="annot"><span class="annottext">[Block CmmNode C C]
</span><a href="#local-6989586621681049726"><span class="hs-identifier hs-var">blocks</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">[Block CmmNode C C]
</span><a href="#local-6989586621681049726"><span class="hs-identifier hs-var">blocks</span></a></span><span>
</span><span id="line-99"></span><span>
</span><span id="line-100"></span><span>  </span><span class="annot"><a href="#local-6989586621681049727"><span class="hs-identifier hs-var">flatten0</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.Cmm.Graph.html#CgLabel"><span class="hs-identifier hs-type">CgLabel</span></a></span><span> </span><span id="local-6989586621681049725"><span class="annot"><span class="annottext">BlockId
</span><a href="#local-6989586621681049725"><span class="hs-identifier hs-var">id</span></a></span></span><span> </span><span id="local-6989586621681049724"><span class="annot"><span class="annottext">CmmTickScope
</span><a href="#local-6989586621681049724"><span class="hs-identifier hs-var">tscope</span></a></span></span><span> </span><span class="annot"><span class="hs-glyph hs-type">:</span></span><span> </span><span id="local-6989586621681049723"><span class="annot"><span class="annottext">[CgStmt]
</span><a href="#local-6989586621681049723"><span class="hs-identifier hs-var">stmts</span></a></span></span><span class="hs-special">)</span><span> </span><span id="local-6989586621681049722"><span class="annot"><span class="annottext">[Block CmmNode C C]
</span><a href="#local-6989586621681049722"><span class="hs-identifier hs-var">blocks</span></a></span></span><span>
</span><span id="line-101"></span><span>    </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">[CgStmt]
-&gt; Block CmmNode C O -&gt; [Block CmmNode C C] -&gt; [Block CmmNode C C]
</span><a href="#local-6989586621681049733"><span class="hs-identifier hs-var">flatten1</span></a></span><span> </span><span class="annot"><span class="annottext">[CgStmt]
</span><a href="#local-6989586621681049723"><span class="hs-identifier hs-var">stmts</span></a></span><span> </span><span class="annot"><span class="annottext">Block CmmNode C O
</span><a href="#local-6989586621681049721"><span class="hs-identifier hs-var">block</span></a></span><span> </span><span class="annot"><span class="annottext">[Block CmmNode C C]
</span><a href="#local-6989586621681049722"><span class="hs-identifier hs-var">blocks</span></a></span><span>
</span><span id="line-102"></span><span>    </span><span class="hs-keyword">where</span><span> </span><span class="hs-glyph">!</span><span id="local-6989586621681049721"><span class="annot"><span class="annottext">block :: Block CmmNode C O
</span><a href="#local-6989586621681049721"><span class="hs-identifier hs-var hs-var">block</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">CmmNode C O -&gt; Block CmmNode O O -&gt; Block CmmNode C O
forall (n :: Extensibility -&gt; Extensibility -&gt; *)
       (x :: Extensibility).
n C O -&gt; Block n O x -&gt; Block n C x
</span><a href="GHC.Cmm.Dataflow.Block.html#blockJoinHead"><span class="hs-identifier hs-var">blockJoinHead</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">BlockId -&gt; CmmTickScope -&gt; CmmNode C O
</span><a href="GHC.Cmm.Node.html#CmmEntry"><span class="hs-identifier hs-var">CmmEntry</span></a></span><span> </span><span class="annot"><span class="annottext">BlockId
</span><a href="#local-6989586621681049725"><span class="hs-identifier hs-var">id</span></a></span><span> </span><span class="annot"><span class="annottext">CmmTickScope
</span><a href="#local-6989586621681049724"><span class="hs-identifier hs-var">tscope</span></a></span><span class="hs-special">)</span><span> </span><span class="annot"><span class="annottext">Block CmmNode O O
forall (n :: Extensibility -&gt; Extensibility -&gt; *). Block n O O
</span><a href="GHC.Cmm.Dataflow.Block.html#emptyBlock"><span class="hs-identifier hs-var">emptyBlock</span></a></span><span>
</span><span id="line-103"></span><span>
</span><span id="line-104"></span><span>  </span><span class="annot"><a href="#local-6989586621681049727"><span class="hs-identifier hs-var">flatten0</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.Cmm.Graph.html#CgFork"><span class="hs-identifier hs-type">CgFork</span></a></span><span> </span><span id="local-6989586621681049720"><span class="annot"><span class="annottext">BlockId
</span><a href="#local-6989586621681049720"><span class="hs-identifier hs-var">fork_id</span></a></span></span><span> </span><span id="local-6989586621681049719"><span class="annot"><span class="annottext">CmmAGraph
</span><a href="#local-6989586621681049719"><span class="hs-identifier hs-var">stmts_t</span></a></span></span><span> </span><span id="local-6989586621681049718"><span class="annot"><span class="annottext">CmmTickScope
</span><a href="#local-6989586621681049718"><span class="hs-identifier hs-var">tscope</span></a></span></span><span> </span><span class="annot"><span class="hs-glyph hs-type">:</span></span><span> </span><span id="local-6989586621681049717"><span class="annot"><span class="annottext">[CgStmt]
</span><a href="#local-6989586621681049717"><span class="hs-identifier hs-var">rest</span></a></span></span><span class="hs-special">)</span><span> </span><span id="local-6989586621681049716"><span class="annot"><span class="annottext">[Block CmmNode C C]
</span><a href="#local-6989586621681049716"><span class="hs-identifier hs-var">blocks</span></a></span></span><span>
</span><span id="line-105"></span><span>    </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">BlockId
-&gt; CmmAGraph
-&gt; CmmTickScope
-&gt; [Block CmmNode C C]
-&gt; [Block CmmNode C C]
</span><a href="#local-6989586621681049739"><span class="hs-identifier hs-var">flatten</span></a></span><span> </span><span class="annot"><span class="annottext">BlockId
</span><a href="#local-6989586621681049720"><span class="hs-identifier hs-var">fork_id</span></a></span><span> </span><span class="annot"><span class="annottext">CmmAGraph
</span><a href="#local-6989586621681049719"><span class="hs-identifier hs-var">stmts_t</span></a></span><span> </span><span class="annot"><span class="annottext">CmmTickScope
</span><a href="#local-6989586621681049718"><span class="hs-identifier hs-var">tscope</span></a></span><span> </span><span class="annot"><span class="annottext">([Block CmmNode C C] -&gt; [Block CmmNode C C])
-&gt; [Block CmmNode C C] -&gt; [Block CmmNode C C]
forall a b. (a -&gt; b) -&gt; a -&gt; b
</span><a href="../../base/src/GHC.Base.html#%24"><span class="hs-operator hs-var">$</span></a></span><span> </span><span class="annot"><span class="annottext">[CgStmt] -&gt; [Block CmmNode C C] -&gt; [Block CmmNode C C]
</span><a href="#local-6989586621681049727"><span class="hs-identifier hs-var">flatten0</span></a></span><span> </span><span class="annot"><span class="annottext">[CgStmt]
</span><a href="#local-6989586621681049717"><span class="hs-identifier hs-var">rest</span></a></span><span> </span><span class="annot"><span class="annottext">[Block CmmNode C C]
</span><a href="#local-6989586621681049716"><span class="hs-identifier hs-var">blocks</span></a></span><span>
</span><span id="line-106"></span><span>
</span><span id="line-107"></span><span>  </span><span class="annot"><a href="#local-6989586621681049727"><span class="hs-identifier hs-var">flatten0</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.Cmm.Graph.html#CgLast"><span class="hs-identifier hs-type">CgLast</span></a></span><span> </span><span class="annot"><span class="annottext">CmmNode O C
</span><span class="hs-identifier">_</span></span><span> </span><span class="annot"><span class="hs-glyph hs-type">:</span></span><span> </span><span id="local-6989586621681049715"><span class="annot"><span class="annottext">[CgStmt]
</span><a href="#local-6989586621681049715"><span class="hs-identifier hs-var">stmts</span></a></span></span><span class="hs-special">)</span><span> </span><span id="local-6989586621681049714"><span class="annot"><span class="annottext">[Block CmmNode C C]
</span><a href="#local-6989586621681049714"><span class="hs-identifier hs-var">blocks</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">[CgStmt] -&gt; [Block CmmNode C C] -&gt; [Block CmmNode C C]
</span><a href="#local-6989586621681049727"><span class="hs-identifier hs-var">flatten0</span></a></span><span> </span><span class="annot"><span class="annottext">[CgStmt]
</span><a href="#local-6989586621681049715"><span class="hs-identifier hs-var">stmts</span></a></span><span> </span><span class="annot"><span class="annottext">[Block CmmNode C C]
</span><a href="#local-6989586621681049714"><span class="hs-identifier hs-var">blocks</span></a></span><span>
</span><span id="line-108"></span><span>  </span><span class="annot"><a href="#local-6989586621681049727"><span class="hs-identifier hs-var">flatten0</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.Cmm.Graph.html#CgStmt"><span class="hs-identifier hs-type">CgStmt</span></a></span><span> </span><span class="annot"><span class="annottext">CmmNode O O
</span><span class="hs-identifier">_</span></span><span> </span><span class="annot"><span class="hs-glyph hs-type">:</span></span><span> </span><span id="local-6989586621681049713"><span class="annot"><span class="annottext">[CgStmt]
</span><a href="#local-6989586621681049713"><span class="hs-identifier hs-var">stmts</span></a></span></span><span class="hs-special">)</span><span> </span><span id="local-6989586621681049712"><span class="annot"><span class="annottext">[Block CmmNode C C]
</span><a href="#local-6989586621681049712"><span class="hs-identifier hs-var">blocks</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">[CgStmt] -&gt; [Block CmmNode C C] -&gt; [Block CmmNode C C]
</span><a href="#local-6989586621681049727"><span class="hs-identifier hs-var">flatten0</span></a></span><span> </span><span class="annot"><span class="annottext">[CgStmt]
</span><a href="#local-6989586621681049713"><span class="hs-identifier hs-var">stmts</span></a></span><span> </span><span class="annot"><span class="annottext">[Block CmmNode C C]
</span><a href="#local-6989586621681049712"><span class="hs-identifier hs-var">blocks</span></a></span><span>
</span><span id="line-109"></span><span>
</span><span id="line-110"></span><span>  </span><span class="hs-comment">--</span><span>
</span><span id="line-111"></span><span>  </span><span class="hs-comment">-- flatten1: we have a partial block, collect statements until the</span><span>
</span><span id="line-112"></span><span>  </span><span class="hs-comment">-- next last node to make a block, then call flatten0 to get the rest</span><span>
</span><span id="line-113"></span><span>  </span><span class="hs-comment">-- of the blocks</span><span>
</span><span id="line-114"></span><span>  </span><span class="hs-comment">--</span><span>
</span><span id="line-115"></span><span>  </span><span class="annot"><a href="#local-6989586621681049733"><span class="hs-identifier hs-type">flatten1</span></a></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="hs-special">[</span><span class="annot"><a href="GHC.Cmm.Graph.html#CgStmt"><span class="hs-identifier hs-type">CgStmt</span></a></span><span class="hs-special">]</span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Cmm.Dataflow.Block.html#Block"><span class="hs-identifier hs-type">Block</span></a></span><span> </span><span class="annot"><a href="GHC.Cmm.Node.html#CmmNode"><span class="hs-identifier hs-type">CmmNode</span></a></span><span> </span><span class="annot"><a href="GHC.Cmm.Dataflow.Block.html#C"><span class="hs-identifier hs-type">C</span></a></span><span> </span><span class="annot"><a href="GHC.Cmm.Dataflow.Block.html#O"><span class="hs-identifier hs-type">O</span></a></span><span>
</span><span id="line-116"></span><span>           </span><span class="hs-glyph">-&gt;</span><span> </span><span class="hs-special">[</span><span class="annot"><a href="GHC.Cmm.Dataflow.Block.html#Block"><span class="hs-identifier hs-type">Block</span></a></span><span> </span><span class="annot"><a href="GHC.Cmm.Node.html#CmmNode"><span class="hs-identifier hs-type">CmmNode</span></a></span><span> </span><span class="annot"><a href="GHC.Cmm.Dataflow.Block.html#C"><span class="hs-identifier hs-type">C</span></a></span><span> </span><span class="annot"><a href="GHC.Cmm.Dataflow.Block.html#C"><span class="hs-identifier hs-type">C</span></a></span><span class="hs-special">]</span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="hs-special">[</span><span class="annot"><a href="GHC.Cmm.Dataflow.Block.html#Block"><span class="hs-identifier hs-type">Block</span></a></span><span> </span><span class="annot"><a href="GHC.Cmm.Node.html#CmmNode"><span class="hs-identifier hs-type">CmmNode</span></a></span><span> </span><span class="annot"><a href="GHC.Cmm.Dataflow.Block.html#C"><span class="hs-identifier hs-type">C</span></a></span><span> </span><span class="annot"><a href="GHC.Cmm.Dataflow.Block.html#C"><span class="hs-identifier hs-type">C</span></a></span><span class="hs-special">]</span><span>
</span><span id="line-117"></span><span>
</span><span id="line-118"></span><span>  </span><span class="hs-comment">-- The current block falls through to the end of a function or fork:</span><span>
</span><span id="line-119"></span><span>  </span><span class="hs-comment">-- this code should not be reachable, but it may be referenced by</span><span>
</span><span id="line-120"></span><span>  </span><span class="hs-comment">-- other code that is not reachable.  We'll remove it later with</span><span>
</span><span id="line-121"></span><span>  </span><span class="hs-comment">-- dead-code analysis, but for now we have to keep the graph</span><span>
</span><span id="line-122"></span><span>  </span><span class="hs-comment">-- well-formed, so we terminate the block with a branch to the</span><span>
</span><span id="line-123"></span><span>  </span><span class="hs-comment">-- beginning of the current block.</span><span>
</span><span id="line-124"></span><span>  </span><span id="local-6989586621681049733"><span class="annot"><span class="annottext">flatten1 :: [CgStmt]
-&gt; Block CmmNode C O -&gt; [Block CmmNode C C] -&gt; [Block CmmNode C C]
</span><a href="#local-6989586621681049733"><span class="hs-identifier hs-var hs-var">flatten1</span></a></span></span><span> </span><span class="hs-special">[</span><span class="hs-special">]</span><span> </span><span id="local-6989586621681049711"><span class="annot"><span class="annottext">Block CmmNode C O
</span><a href="#local-6989586621681049711"><span class="hs-identifier hs-var">block</span></a></span></span><span> </span><span id="local-6989586621681049710"><span class="annot"><span class="annottext">[Block CmmNode C C]
</span><a href="#local-6989586621681049710"><span class="hs-identifier hs-var">blocks</span></a></span></span><span>
</span><span id="line-125"></span><span>    </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Block CmmNode C O -&gt; CmmNode O C -&gt; Block CmmNode C C
forall (n :: Extensibility -&gt; Extensibility -&gt; *)
       (e :: Extensibility).
Block n e O -&gt; n O C -&gt; Block n e C
</span><a href="GHC.Cmm.Dataflow.Block.html#blockJoinTail"><span class="hs-identifier hs-var">blockJoinTail</span></a></span><span> </span><span class="annot"><span class="annottext">Block CmmNode C O
</span><a href="#local-6989586621681049711"><span class="hs-identifier hs-var">block</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">BlockId -&gt; CmmNode O C
</span><a href="GHC.Cmm.Node.html#CmmBranch"><span class="hs-identifier hs-var">CmmBranch</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Block CmmNode C O -&gt; BlockId
forall (thing :: Extensibility -&gt; Extensibility -&gt; *)
       (x :: Extensibility).
NonLocal thing =&gt;
thing C x -&gt; BlockId
</span><a href="GHC.Cmm.Dataflow.Graph.html#entryLabel"><span class="hs-identifier hs-var">entryLabel</span></a></span><span> </span><span class="annot"><span class="annottext">Block CmmNode C O
</span><a href="#local-6989586621681049711"><span class="hs-identifier hs-var">block</span></a></span><span class="hs-special">)</span><span class="hs-special">)</span><span> </span><span class="annot"><span class="annottext">Block CmmNode C C -&gt; [Block CmmNode C C] -&gt; [Block CmmNode C C]
forall a. a -&gt; [a] -&gt; [a]
</span><span class="hs-glyph hs-var">:</span></span><span> </span><span class="annot"><span class="annottext">[Block CmmNode C C]
</span><a href="#local-6989586621681049710"><span class="hs-identifier hs-var">blocks</span></a></span><span>
</span><span id="line-126"></span><span>
</span><span id="line-127"></span><span>  </span><span class="annot"><a href="#local-6989586621681049733"><span class="hs-identifier hs-var">flatten1</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.Cmm.Graph.html#CgLast"><span class="hs-identifier hs-type">CgLast</span></a></span><span> </span><span id="local-6989586621681049706"><span class="annot"><span class="annottext">CmmNode O C
</span><a href="#local-6989586621681049706"><span class="hs-identifier hs-var">stmt</span></a></span></span><span> </span><span class="annot"><span class="hs-glyph hs-type">:</span></span><span> </span><span id="local-6989586621681049705"><span class="annot"><span class="annottext">[CgStmt]
</span><a href="#local-6989586621681049705"><span class="hs-identifier hs-var">stmts</span></a></span></span><span class="hs-special">)</span><span> </span><span id="local-6989586621681049704"><span class="annot"><span class="annottext">Block CmmNode C O
</span><a href="#local-6989586621681049704"><span class="hs-identifier hs-var">block</span></a></span></span><span> </span><span id="local-6989586621681049703"><span class="annot"><span class="annottext">[Block CmmNode C C]
</span><a href="#local-6989586621681049703"><span class="hs-identifier hs-var">blocks</span></a></span></span><span>
</span><span id="line-128"></span><span>    </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Block CmmNode C C
</span><a href="#local-6989586621681049702"><span class="hs-identifier hs-var">block'</span></a></span><span> </span><span class="annot"><span class="annottext">Block CmmNode C C -&gt; [Block CmmNode C C] -&gt; [Block CmmNode C C]
forall a. a -&gt; [a] -&gt; [a]
</span><span class="hs-glyph hs-var">:</span></span><span> </span><span class="annot"><span class="annottext">[CgStmt] -&gt; [Block CmmNode C C] -&gt; [Block CmmNode C C]
</span><a href="#local-6989586621681049727"><span class="hs-identifier hs-var">flatten0</span></a></span><span> </span><span class="annot"><span class="annottext">[CgStmt]
</span><a href="#local-6989586621681049705"><span class="hs-identifier hs-var">stmts</span></a></span><span> </span><span class="annot"><span class="annottext">[Block CmmNode C C]
</span><a href="#local-6989586621681049703"><span class="hs-identifier hs-var">blocks</span></a></span><span>
</span><span id="line-129"></span><span>    </span><span class="hs-keyword">where</span><span> </span><span class="hs-glyph">!</span><span id="local-6989586621681049702"><span class="annot"><span class="annottext">block' :: Block CmmNode C C
</span><a href="#local-6989586621681049702"><span class="hs-identifier hs-var hs-var">block'</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Block CmmNode C O -&gt; CmmNode O C -&gt; Block CmmNode C C
forall (n :: Extensibility -&gt; Extensibility -&gt; *)
       (e :: Extensibility).
Block n e O -&gt; n O C -&gt; Block n e C
</span><a href="GHC.Cmm.Dataflow.Block.html#blockJoinTail"><span class="hs-identifier hs-var">blockJoinTail</span></a></span><span> </span><span class="annot"><span class="annottext">Block CmmNode C O
</span><a href="#local-6989586621681049704"><span class="hs-identifier hs-var">block</span></a></span><span> </span><span class="annot"><span class="annottext">CmmNode O C
</span><a href="#local-6989586621681049706"><span class="hs-identifier hs-var">stmt</span></a></span><span>
</span><span id="line-130"></span><span>
</span><span id="line-131"></span><span>  </span><span class="annot"><a href="#local-6989586621681049733"><span class="hs-identifier hs-var">flatten1</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.Cmm.Graph.html#CgStmt"><span class="hs-identifier hs-type">CgStmt</span></a></span><span> </span><span id="local-6989586621681049701"><span class="annot"><span class="annottext">CmmNode O O
</span><a href="#local-6989586621681049701"><span class="hs-identifier hs-var">stmt</span></a></span></span><span> </span><span class="annot"><span class="hs-glyph hs-type">:</span></span><span> </span><span id="local-6989586621681049700"><span class="annot"><span class="annottext">[CgStmt]
</span><a href="#local-6989586621681049700"><span class="hs-identifier hs-var">stmts</span></a></span></span><span class="hs-special">)</span><span> </span><span id="local-6989586621681049699"><span class="annot"><span class="annottext">Block CmmNode C O
</span><a href="#local-6989586621681049699"><span class="hs-identifier hs-var">block</span></a></span></span><span> </span><span id="local-6989586621681049698"><span class="annot"><span class="annottext">[Block CmmNode C C]
</span><a href="#local-6989586621681049698"><span class="hs-identifier hs-var">blocks</span></a></span></span><span>
</span><span id="line-132"></span><span>    </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">[CgStmt]
-&gt; Block CmmNode C O -&gt; [Block CmmNode C C] -&gt; [Block CmmNode C C]
</span><a href="#local-6989586621681049733"><span class="hs-identifier hs-var">flatten1</span></a></span><span> </span><span class="annot"><span class="annottext">[CgStmt]
</span><a href="#local-6989586621681049700"><span class="hs-identifier hs-var">stmts</span></a></span><span> </span><span class="annot"><span class="annottext">Block CmmNode C O
</span><a href="#local-6989586621681049697"><span class="hs-identifier hs-var">block'</span></a></span><span> </span><span class="annot"><span class="annottext">[Block CmmNode C C]
</span><a href="#local-6989586621681049698"><span class="hs-identifier hs-var">blocks</span></a></span><span>
</span><span id="line-133"></span><span>    </span><span class="hs-keyword">where</span><span> </span><span class="hs-glyph">!</span><span id="local-6989586621681049697"><span class="annot"><span class="annottext">block' :: Block CmmNode C O
</span><a href="#local-6989586621681049697"><span class="hs-identifier hs-var hs-var">block'</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Block CmmNode C O -&gt; CmmNode O O -&gt; Block CmmNode C O
forall (n :: Extensibility -&gt; Extensibility -&gt; *)
       (e :: Extensibility).
Block n e O -&gt; n O O -&gt; Block n e O
</span><a href="GHC.Cmm.Dataflow.Block.html#blockSnoc"><span class="hs-identifier hs-var">blockSnoc</span></a></span><span> </span><span class="annot"><span class="annottext">Block CmmNode C O
</span><a href="#local-6989586621681049699"><span class="hs-identifier hs-var">block</span></a></span><span> </span><span class="annot"><span class="annottext">CmmNode O O
</span><a href="#local-6989586621681049701"><span class="hs-identifier hs-var">stmt</span></a></span><span>
</span><span id="line-134"></span><span>
</span><span id="line-135"></span><span>  </span><span class="annot"><a href="#local-6989586621681049733"><span class="hs-identifier hs-var">flatten1</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.Cmm.Graph.html#CgFork"><span class="hs-identifier hs-type">CgFork</span></a></span><span> </span><span id="local-6989586621681049695"><span class="annot"><span class="annottext">BlockId
</span><a href="#local-6989586621681049695"><span class="hs-identifier hs-var">fork_id</span></a></span></span><span> </span><span id="local-6989586621681049694"><span class="annot"><span class="annottext">CmmAGraph
</span><a href="#local-6989586621681049694"><span class="hs-identifier hs-var">stmts_t</span></a></span></span><span> </span><span id="local-6989586621681049693"><span class="annot"><span class="annottext">CmmTickScope
</span><a href="#local-6989586621681049693"><span class="hs-identifier hs-var">tscope</span></a></span></span><span> </span><span class="annot"><span class="hs-glyph hs-type">:</span></span><span> </span><span id="local-6989586621681049692"><span class="annot"><span class="annottext">[CgStmt]
</span><a href="#local-6989586621681049692"><span class="hs-identifier hs-var">rest</span></a></span></span><span class="hs-special">)</span><span> </span><span id="local-6989586621681049691"><span class="annot"><span class="annottext">Block CmmNode C O
</span><a href="#local-6989586621681049691"><span class="hs-identifier hs-var">block</span></a></span></span><span> </span><span id="local-6989586621681049690"><span class="annot"><span class="annottext">[Block CmmNode C C]
</span><a href="#local-6989586621681049690"><span class="hs-identifier hs-var">blocks</span></a></span></span><span>
</span><span id="line-136"></span><span>    </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">BlockId
-&gt; CmmAGraph
-&gt; CmmTickScope
-&gt; [Block CmmNode C C]
-&gt; [Block CmmNode C C]
</span><a href="#local-6989586621681049739"><span class="hs-identifier hs-var">flatten</span></a></span><span> </span><span class="annot"><span class="annottext">BlockId
</span><a href="#local-6989586621681049695"><span class="hs-identifier hs-var">fork_id</span></a></span><span> </span><span class="annot"><span class="annottext">CmmAGraph
</span><a href="#local-6989586621681049694"><span class="hs-identifier hs-var">stmts_t</span></a></span><span> </span><span class="annot"><span class="annottext">CmmTickScope
</span><a href="#local-6989586621681049693"><span class="hs-identifier hs-var">tscope</span></a></span><span> </span><span class="annot"><span class="annottext">([Block CmmNode C C] -&gt; [Block CmmNode C C])
-&gt; [Block CmmNode C C] -&gt; [Block CmmNode C C]
forall a b. (a -&gt; b) -&gt; a -&gt; b
</span><a href="../../base/src/GHC.Base.html#%24"><span class="hs-operator hs-var">$</span></a></span><span> </span><span class="annot"><span class="annottext">[CgStmt]
-&gt; Block CmmNode C O -&gt; [Block CmmNode C C] -&gt; [Block CmmNode C C]
</span><a href="#local-6989586621681049733"><span class="hs-identifier hs-var">flatten1</span></a></span><span> </span><span class="annot"><span class="annottext">[CgStmt]
</span><a href="#local-6989586621681049692"><span class="hs-identifier hs-var">rest</span></a></span><span> </span><span class="annot"><span class="annottext">Block CmmNode C O
</span><a href="#local-6989586621681049691"><span class="hs-identifier hs-var">block</span></a></span><span> </span><span class="annot"><span class="annottext">[Block CmmNode C C]
</span><a href="#local-6989586621681049690"><span class="hs-identifier hs-var">blocks</span></a></span><span>
</span><span id="line-137"></span><span>
</span><span id="line-138"></span><span>  </span><span class="hs-comment">-- a label here means that we should start a new block, and the</span><span>
</span><span id="line-139"></span><span>  </span><span class="hs-comment">-- current block should fall through to the new block.</span><span>
</span><span id="line-140"></span><span>  </span><span class="annot"><a href="#local-6989586621681049733"><span class="hs-identifier hs-var">flatten1</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.Cmm.Graph.html#CgLabel"><span class="hs-identifier hs-type">CgLabel</span></a></span><span> </span><span id="local-6989586621681049689"><span class="annot"><span class="annottext">BlockId
</span><a href="#local-6989586621681049689"><span class="hs-identifier hs-var">id</span></a></span></span><span> </span><span id="local-6989586621681049688"><span class="annot"><span class="annottext">CmmTickScope
</span><a href="#local-6989586621681049688"><span class="hs-identifier hs-var">tscp</span></a></span></span><span> </span><span class="annot"><span class="hs-glyph hs-type">:</span></span><span> </span><span id="local-6989586621681049687"><span class="annot"><span class="annottext">[CgStmt]
</span><a href="#local-6989586621681049687"><span class="hs-identifier hs-var">stmts</span></a></span></span><span class="hs-special">)</span><span> </span><span id="local-6989586621681049686"><span class="annot"><span class="annottext">Block CmmNode C O
</span><a href="#local-6989586621681049686"><span class="hs-identifier hs-var">block</span></a></span></span><span> </span><span id="local-6989586621681049685"><span class="annot"><span class="annottext">[Block CmmNode C C]
</span><a href="#local-6989586621681049685"><span class="hs-identifier hs-var">blocks</span></a></span></span><span>
</span><span id="line-141"></span><span>    </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Block CmmNode C O -&gt; CmmNode O C -&gt; Block CmmNode C C
forall (n :: Extensibility -&gt; Extensibility -&gt; *)
       (e :: Extensibility).
Block n e O -&gt; n O C -&gt; Block n e C
</span><a href="GHC.Cmm.Dataflow.Block.html#blockJoinTail"><span class="hs-identifier hs-var">blockJoinTail</span></a></span><span> </span><span class="annot"><span class="annottext">Block CmmNode C O
</span><a href="#local-6989586621681049686"><span class="hs-identifier hs-var">block</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">BlockId -&gt; CmmNode O C
</span><a href="GHC.Cmm.Node.html#CmmBranch"><span class="hs-identifier hs-var">CmmBranch</span></a></span><span> </span><span class="annot"><span class="annottext">BlockId
</span><a href="#local-6989586621681049689"><span class="hs-identifier hs-var">id</span></a></span><span class="hs-special">)</span><span> </span><span class="annot"><span class="annottext">Block CmmNode C C -&gt; [Block CmmNode C C] -&gt; [Block CmmNode C C]
forall a. a -&gt; [a] -&gt; [a]
</span><span class="hs-glyph hs-var">:</span></span><span>
</span><span id="line-142"></span><span>      </span><span class="annot"><span class="annottext">[CgStmt]
-&gt; Block CmmNode C O -&gt; [Block CmmNode C C] -&gt; [Block CmmNode C C]
</span><a href="#local-6989586621681049733"><span class="hs-identifier hs-var">flatten1</span></a></span><span> </span><span class="annot"><span class="annottext">[CgStmt]
</span><a href="#local-6989586621681049687"><span class="hs-identifier hs-var">stmts</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">CmmNode C O -&gt; Block CmmNode O O -&gt; Block CmmNode C O
forall (n :: Extensibility -&gt; Extensibility -&gt; *)
       (x :: Extensibility).
n C O -&gt; Block n O x -&gt; Block n C x
</span><a href="GHC.Cmm.Dataflow.Block.html#blockJoinHead"><span class="hs-identifier hs-var">blockJoinHead</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">BlockId -&gt; CmmTickScope -&gt; CmmNode C O
</span><a href="GHC.Cmm.Node.html#CmmEntry"><span class="hs-identifier hs-var">CmmEntry</span></a></span><span> </span><span class="annot"><span class="annottext">BlockId
</span><a href="#local-6989586621681049689"><span class="hs-identifier hs-var">id</span></a></span><span> </span><span class="annot"><span class="annottext">CmmTickScope
</span><a href="#local-6989586621681049688"><span class="hs-identifier hs-var">tscp</span></a></span><span class="hs-special">)</span><span> </span><span class="annot"><span class="annottext">Block CmmNode O O
forall (n :: Extensibility -&gt; Extensibility -&gt; *). Block n O O
</span><a href="GHC.Cmm.Dataflow.Block.html#emptyBlock"><span class="hs-identifier hs-var">emptyBlock</span></a></span><span class="hs-special">)</span><span> </span><span class="annot"><span class="annottext">[Block CmmNode C C]
</span><a href="#local-6989586621681049685"><span class="hs-identifier hs-var">blocks</span></a></span><span>
</span><span id="line-143"></span><span>
</span><span id="line-144"></span><span>
</span><span id="line-145"></span><span>
</span><span id="line-146"></span><span class="hs-comment">---------- AGraph manipulation</span><span>
</span><span id="line-147"></span><span>
</span><span id="line-148"></span><span class="annot"><a href="GHC.Cmm.Graph.html#%3C%2A%3E"><span class="hs-operator hs-type">(&lt;*&gt;)</span></a></span><span>          </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="GHC.Cmm.Graph.html#CmmAGraph"><span class="hs-identifier hs-type">CmmAGraph</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Cmm.Graph.html#CmmAGraph"><span class="hs-identifier hs-type">CmmAGraph</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Cmm.Graph.html#CmmAGraph"><span class="hs-identifier hs-type">CmmAGraph</span></a></span><span>
</span><span id="line-149"></span><span id="%3C%2A%3E"><span class="annot"><span class="annottext">&lt;*&gt; :: CmmAGraph -&gt; CmmAGraph -&gt; CmmAGraph
</span><a href="GHC.Cmm.Graph.html#%3C%2A%3E"><span class="hs-operator hs-var hs-var">(&lt;*&gt;)</span></a></span></span><span>           </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">CmmAGraph -&gt; CmmAGraph -&gt; CmmAGraph
forall a. OrdList a -&gt; OrdList a -&gt; OrdList a
</span><a href="GHC.Data.OrdList.html#appOL"><span class="hs-identifier hs-var">appOL</span></a></span><span>
</span><span id="line-150"></span><span>
</span><span id="line-151"></span><span class="annot"><a href="GHC.Cmm.Graph.html#catAGraphs"><span class="hs-identifier hs-type">catAGraphs</span></a></span><span>     </span><span class="hs-glyph">::</span><span> </span><span class="hs-special">[</span><span class="annot"><a href="GHC.Cmm.Graph.html#CmmAGraph"><span class="hs-identifier hs-type">CmmAGraph</span></a></span><span class="hs-special">]</span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Cmm.Graph.html#CmmAGraph"><span class="hs-identifier hs-type">CmmAGraph</span></a></span><span>
</span><span id="line-152"></span><span id="catAGraphs"><span class="annot"><span class="annottext">catAGraphs :: [CmmAGraph] -&gt; CmmAGraph
</span><a href="GHC.Cmm.Graph.html#catAGraphs"><span class="hs-identifier hs-var hs-var">catAGraphs</span></a></span></span><span>      </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">[CmmAGraph] -&gt; CmmAGraph
forall a. [OrdList a] -&gt; OrdList a
</span><a href="GHC.Data.OrdList.html#concatOL"><span class="hs-identifier hs-var">concatOL</span></a></span><span>
</span><span id="line-153"></span><span>
</span><span id="line-154"></span><span class="hs-comment">-- | creates a sequence &quot;goto id; id:&quot; as an AGraph</span><span>
</span><span id="line-155"></span><span class="annot"><a href="GHC.Cmm.Graph.html#mkLabel"><span class="hs-identifier hs-type">mkLabel</span></a></span><span>        </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="GHC.Cmm.BlockId.html#BlockId"><span class="hs-identifier hs-type">BlockId</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Cmm.Node.html#CmmTickScope"><span class="hs-identifier hs-type">CmmTickScope</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Cmm.Graph.html#CmmAGraph"><span class="hs-identifier hs-type">CmmAGraph</span></a></span><span>
</span><span id="line-156"></span><span id="mkLabel"><span class="annot"><span class="annottext">mkLabel :: BlockId -&gt; CmmTickScope -&gt; CmmAGraph
</span><a href="GHC.Cmm.Graph.html#mkLabel"><span class="hs-identifier hs-var hs-var">mkLabel</span></a></span></span><span> </span><span id="local-6989586621681049682"><span class="annot"><span class="annottext">BlockId
</span><a href="#local-6989586621681049682"><span class="hs-identifier hs-var">bid</span></a></span></span><span> </span><span id="local-6989586621681049681"><span class="annot"><span class="annottext">CmmTickScope
</span><a href="#local-6989586621681049681"><span class="hs-identifier hs-var">scp</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">CgStmt -&gt; CmmAGraph
forall a. a -&gt; OrdList a
</span><a href="GHC.Data.OrdList.html#unitOL"><span class="hs-identifier hs-var">unitOL</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">BlockId -&gt; CmmTickScope -&gt; CgStmt
</span><a href="GHC.Cmm.Graph.html#CgLabel"><span class="hs-identifier hs-var">CgLabel</span></a></span><span> </span><span class="annot"><span class="annottext">BlockId
</span><a href="#local-6989586621681049682"><span class="hs-identifier hs-var">bid</span></a></span><span> </span><span class="annot"><span class="annottext">CmmTickScope
</span><a href="#local-6989586621681049681"><span class="hs-identifier hs-var">scp</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-157"></span><span>
</span><span id="line-158"></span><span class="hs-comment">-- | creates an open AGraph from a given node</span><span>
</span><span id="line-159"></span><span class="annot"><a href="GHC.Cmm.Graph.html#mkMiddle"><span class="hs-identifier hs-type">mkMiddle</span></a></span><span>        </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="GHC.Cmm.Node.html#CmmNode"><span class="hs-identifier hs-type">CmmNode</span></a></span><span> </span><span class="annot"><a href="GHC.Cmm.Dataflow.Block.html#O"><span class="hs-identifier hs-type">O</span></a></span><span> </span><span class="annot"><a href="GHC.Cmm.Dataflow.Block.html#O"><span class="hs-identifier hs-type">O</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Cmm.Graph.html#CmmAGraph"><span class="hs-identifier hs-type">CmmAGraph</span></a></span><span>
</span><span id="line-160"></span><span id="mkMiddle"><span class="annot"><span class="annottext">mkMiddle :: CmmNode O O -&gt; CmmAGraph
</span><a href="GHC.Cmm.Graph.html#mkMiddle"><span class="hs-identifier hs-var hs-var">mkMiddle</span></a></span></span><span> </span><span id="local-6989586621681049679"><span class="annot"><span class="annottext">CmmNode O O
</span><a href="#local-6989586621681049679"><span class="hs-identifier hs-var">middle</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">CgStmt -&gt; CmmAGraph
forall a. a -&gt; OrdList a
</span><a href="GHC.Data.OrdList.html#unitOL"><span class="hs-identifier hs-var">unitOL</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">CmmNode O O -&gt; CgStmt
</span><a href="GHC.Cmm.Graph.html#CgStmt"><span class="hs-identifier hs-var">CgStmt</span></a></span><span> </span><span class="annot"><span class="annottext">CmmNode O O
</span><a href="#local-6989586621681049679"><span class="hs-identifier hs-var">middle</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-161"></span><span>
</span><span id="line-162"></span><span class="hs-comment">-- | creates a closed AGraph from a given node</span><span>
</span><span id="line-163"></span><span class="annot"><a href="GHC.Cmm.Graph.html#mkLast"><span class="hs-identifier hs-type">mkLast</span></a></span><span>         </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="GHC.Cmm.Node.html#CmmNode"><span class="hs-identifier hs-type">CmmNode</span></a></span><span> </span><span class="annot"><a href="GHC.Cmm.Dataflow.Block.html#O"><span class="hs-identifier hs-type">O</span></a></span><span> </span><span class="annot"><a href="GHC.Cmm.Dataflow.Block.html#C"><span class="hs-identifier hs-type">C</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Cmm.Graph.html#CmmAGraph"><span class="hs-identifier hs-type">CmmAGraph</span></a></span><span>
</span><span id="line-164"></span><span id="mkLast"><span class="annot"><span class="annottext">mkLast :: CmmNode O C -&gt; CmmAGraph
</span><a href="GHC.Cmm.Graph.html#mkLast"><span class="hs-identifier hs-var hs-var">mkLast</span></a></span></span><span> </span><span id="local-6989586621681049678"><span class="annot"><span class="annottext">CmmNode O C
</span><a href="#local-6989586621681049678"><span class="hs-identifier hs-var">last</span></a></span></span><span>     </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">CgStmt -&gt; CmmAGraph
forall a. a -&gt; OrdList a
</span><a href="GHC.Data.OrdList.html#unitOL"><span class="hs-identifier hs-var">unitOL</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">CmmNode O C -&gt; CgStmt
</span><a href="GHC.Cmm.Graph.html#CgLast"><span class="hs-identifier hs-var">CgLast</span></a></span><span> </span><span class="annot"><span class="annottext">CmmNode O C
</span><a href="#local-6989586621681049678"><span class="hs-identifier hs-var">last</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-165"></span><span>
</span><span id="line-166"></span><span class="hs-comment">-- | A labelled code block; should end in a last node</span><span>
</span><span id="line-167"></span><span class="annot"><a href="GHC.Cmm.Graph.html#outOfLine"><span class="hs-identifier hs-type">outOfLine</span></a></span><span>      </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="GHC.Cmm.BlockId.html#BlockId"><span class="hs-identifier hs-type">BlockId</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Cmm.Graph.html#CmmAGraphScoped"><span class="hs-identifier hs-type">CmmAGraphScoped</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Cmm.Graph.html#CmmAGraph"><span class="hs-identifier hs-type">CmmAGraph</span></a></span><span>
</span><span id="line-168"></span><span id="outOfLine"><span class="annot"><span class="annottext">outOfLine :: BlockId -&gt; CmmAGraphScoped -&gt; CmmAGraph
</span><a href="GHC.Cmm.Graph.html#outOfLine"><span class="hs-identifier hs-var hs-var">outOfLine</span></a></span></span><span> </span><span id="local-6989586621681049677"><span class="annot"><span class="annottext">BlockId
</span><a href="#local-6989586621681049677"><span class="hs-identifier hs-var">l</span></a></span></span><span> </span><span class="hs-special">(</span><span id="local-6989586621681049676"><span class="annot"><span class="annottext">CmmAGraph
</span><a href="#local-6989586621681049676"><span class="hs-identifier hs-var">c</span></a></span></span><span class="hs-special">,</span><span id="local-6989586621681049675"><span class="annot"><span class="annottext">CmmTickScope
</span><a href="#local-6989586621681049675"><span class="hs-identifier hs-var">s</span></a></span></span><span class="hs-special">)</span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">CgStmt -&gt; CmmAGraph
forall a. a -&gt; OrdList a
</span><a href="GHC.Data.OrdList.html#unitOL"><span class="hs-identifier hs-var">unitOL</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">BlockId -&gt; CmmAGraph -&gt; CmmTickScope -&gt; CgStmt
</span><a href="GHC.Cmm.Graph.html#CgFork"><span class="hs-identifier hs-var">CgFork</span></a></span><span> </span><span class="annot"><span class="annottext">BlockId
</span><a href="#local-6989586621681049677"><span class="hs-identifier hs-var">l</span></a></span><span> </span><span class="annot"><span class="annottext">CmmAGraph
</span><a href="#local-6989586621681049676"><span class="hs-identifier hs-var">c</span></a></span><span> </span><span class="annot"><span class="annottext">CmmTickScope
</span><a href="#local-6989586621681049675"><span class="hs-identifier hs-var">s</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-169"></span><span>
</span><span id="line-170"></span><span class="hs-comment">-- | allocate a fresh label for the entry point</span><span>
</span><span id="line-171"></span><span class="annot"><a href="GHC.Cmm.Graph.html#lgraphOfAGraph"><span class="hs-identifier hs-type">lgraphOfAGraph</span></a></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="GHC.Cmm.Graph.html#CmmAGraphScoped"><span class="hs-identifier hs-type">CmmAGraphScoped</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Types.Unique.Supply.html#UniqSM"><span class="hs-identifier hs-type">UniqSM</span></a></span><span> </span><span class="annot"><a href="GHC.Cmm.html#CmmGraph"><span class="hs-identifier hs-type">CmmGraph</span></a></span><span>
</span><span id="line-172"></span><span id="lgraphOfAGraph"><span class="annot"><span class="annottext">lgraphOfAGraph :: CmmAGraphScoped -&gt; UniqSM CmmGraph
</span><a href="GHC.Cmm.Graph.html#lgraphOfAGraph"><span class="hs-identifier hs-var hs-var">lgraphOfAGraph</span></a></span></span><span> </span><span id="local-6989586621681049674"><span class="annot"><span class="annottext">CmmAGraphScoped
</span><a href="#local-6989586621681049674"><span class="hs-identifier hs-var">g</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-keyword">do</span><span>
</span><span id="line-173"></span><span>  </span><span id="local-6989586621681049673"><span class="annot"><span class="annottext">Unique
</span><a href="#local-6989586621681049673"><span class="hs-identifier hs-var">u</span></a></span></span><span> </span><span class="hs-glyph">&lt;-</span><span> </span><span class="annot"><span class="annottext">UniqSM Unique
forall (m :: * -&gt; *). MonadUnique m =&gt; m Unique
</span><a href="GHC.Types.Unique.Supply.html#getUniqueM"><span class="hs-identifier hs-var">getUniqueM</span></a></span><span>
</span><span id="line-174"></span><span>  </span><span class="annot"><span class="annottext">CmmGraph -&gt; UniqSM CmmGraph
forall (m :: * -&gt; *) a. Monad m =&gt; a -&gt; m a
</span><a href="../../base/src/GHC.Base.html#return"><span class="hs-identifier hs-var">return</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">BlockId -&gt; CmmAGraphScoped -&gt; CmmGraph
</span><a href="GHC.Cmm.Graph.html#labelAGraph"><span class="hs-identifier hs-var">labelAGraph</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Unique -&gt; BlockId
</span><a href="GHC.Cmm.BlockId.html#mkBlockId"><span class="hs-identifier hs-var">mkBlockId</span></a></span><span> </span><span class="annot"><span class="annottext">Unique
</span><a href="#local-6989586621681049673"><span class="hs-identifier hs-var">u</span></a></span><span class="hs-special">)</span><span> </span><span class="annot"><span class="annottext">CmmAGraphScoped
</span><a href="#local-6989586621681049674"><span class="hs-identifier hs-var">g</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-175"></span><span>
</span><span id="line-176"></span><span class="hs-comment">-- | use the given BlockId as the label of the entry point</span><span>
</span><span id="line-177"></span><span class="annot"><a href="GHC.Cmm.Graph.html#labelAGraph"><span class="hs-identifier hs-type">labelAGraph</span></a></span><span>    </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="GHC.Cmm.BlockId.html#BlockId"><span class="hs-identifier hs-type">BlockId</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Cmm.Graph.html#CmmAGraphScoped"><span class="hs-identifier hs-type">CmmAGraphScoped</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Cmm.html#CmmGraph"><span class="hs-identifier hs-type">CmmGraph</span></a></span><span>
</span><span id="line-178"></span><span id="labelAGraph"><span class="annot"><span class="annottext">labelAGraph :: BlockId -&gt; CmmAGraphScoped -&gt; CmmGraph
</span><a href="GHC.Cmm.Graph.html#labelAGraph"><span class="hs-identifier hs-var hs-var">labelAGraph</span></a></span></span><span> </span><span id="local-6989586621681049670"><span class="annot"><span class="annottext">BlockId
</span><a href="#local-6989586621681049670"><span class="hs-identifier hs-var">lbl</span></a></span></span><span> </span><span id="local-6989586621681049669"><span class="annot"><span class="annottext">CmmAGraphScoped
</span><a href="#local-6989586621681049669"><span class="hs-identifier hs-var">ag</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">BlockId -&gt; CmmAGraphScoped -&gt; CmmGraph
</span><a href="GHC.Cmm.Graph.html#flattenCmmAGraph"><span class="hs-identifier hs-var">flattenCmmAGraph</span></a></span><span> </span><span class="annot"><span class="annottext">BlockId
</span><a href="#local-6989586621681049670"><span class="hs-identifier hs-var">lbl</span></a></span><span> </span><span class="annot"><span class="annottext">CmmAGraphScoped
</span><a href="#local-6989586621681049669"><span class="hs-identifier hs-var">ag</span></a></span><span>
</span><span id="line-179"></span><span>
</span><span id="line-180"></span><span class="hs-comment">---------- No-ops</span><span>
</span><span id="line-181"></span><span class="annot"><a href="GHC.Cmm.Graph.html#mkNop"><span class="hs-identifier hs-type">mkNop</span></a></span><span>        </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="GHC.Cmm.Graph.html#CmmAGraph"><span class="hs-identifier hs-type">CmmAGraph</span></a></span><span>
</span><span id="line-182"></span><span id="mkNop"><span class="annot"><span class="annottext">mkNop :: CmmAGraph
</span><a href="GHC.Cmm.Graph.html#mkNop"><span class="hs-identifier hs-var hs-var">mkNop</span></a></span></span><span>         </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">CmmAGraph
forall a. OrdList a
</span><a href="GHC.Data.OrdList.html#nilOL"><span class="hs-identifier hs-var">nilOL</span></a></span><span>
</span><span id="line-183"></span><span>
</span><span id="line-184"></span><span class="annot"><a href="GHC.Cmm.Graph.html#mkComment"><span class="hs-identifier hs-type">mkComment</span></a></span><span>    </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="GHC.Data.FastString.html#FastString"><span class="hs-identifier hs-type">FastString</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Cmm.Graph.html#CmmAGraph"><span class="hs-identifier hs-type">CmmAGraph</span></a></span><span>
</span><span id="line-185"></span><span id="mkComment"><span class="annot"><span class="annottext">mkComment :: FastString -&gt; CmmAGraph
</span><a href="GHC.Cmm.Graph.html#mkComment"><span class="hs-identifier hs-var hs-var">mkComment</span></a></span></span><span> </span><span id="local-6989586621681049667"><span class="annot"><span class="annottext">FastString
</span><a href="#local-6989586621681049667"><span class="hs-identifier hs-var">fs</span></a></span></span><span>
</span><span id="line-186"></span><span>  </span><span class="hs-comment">-- SDM: generating all those comments takes time, this saved about 4% for me</span><span>
</span><span id="line-187"></span><span>  </span><span class="hs-glyph">|</span><span> </span><span class="annot"><span class="annottext">Bool
</span><a href="GHC.Utils.Misc.html#debugIsOn"><span class="hs-identifier hs-var">debugIsOn</span></a></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">CmmNode O O -&gt; CmmAGraph
</span><a href="GHC.Cmm.Graph.html#mkMiddle"><span class="hs-identifier hs-var">mkMiddle</span></a></span><span> </span><span class="annot"><span class="annottext">(CmmNode O O -&gt; CmmAGraph) -&gt; CmmNode O O -&gt; CmmAGraph
forall a b. (a -&gt; b) -&gt; a -&gt; b
</span><a href="../../base/src/GHC.Base.html#%24"><span class="hs-operator hs-var">$</span></a></span><span> </span><span class="annot"><span class="annottext">FastString -&gt; CmmNode O O
</span><a href="GHC.Cmm.Node.html#CmmComment"><span class="hs-identifier hs-var">CmmComment</span></a></span><span> </span><span class="annot"><span class="annottext">FastString
</span><a href="#local-6989586621681049667"><span class="hs-identifier hs-var">fs</span></a></span><span>
</span><span id="line-188"></span><span>  </span><span class="hs-glyph">|</span><span> </span><span class="annot"><span class="annottext">Bool
</span><a href="../../base/src/GHC.Base.html#otherwise"><span class="hs-identifier hs-var">otherwise</span></a></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">CmmAGraph
forall a. OrdList a
</span><a href="GHC.Data.OrdList.html#nilOL"><span class="hs-identifier hs-var">nilOL</span></a></span><span>
</span><span id="line-189"></span><span>
</span><span id="line-190"></span><span class="hs-comment">---------- Assignment and store</span><span>
</span><span id="line-191"></span><span class="annot"><a href="GHC.Cmm.Graph.html#mkAssign"><span class="hs-identifier hs-type">mkAssign</span></a></span><span>     </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="GHC.Cmm.Expr.html#CmmReg"><span class="hs-identifier hs-type">CmmReg</span></a></span><span>  </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Cmm.Expr.html#CmmExpr"><span class="hs-identifier hs-type">CmmExpr</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Cmm.Graph.html#CmmAGraph"><span class="hs-identifier hs-type">CmmAGraph</span></a></span><span>
</span><span id="line-192"></span><span id="mkAssign"><span class="annot"><span class="annottext">mkAssign :: CmmReg -&gt; CmmExpr -&gt; CmmAGraph
</span><a href="GHC.Cmm.Graph.html#mkAssign"><span class="hs-identifier hs-var hs-var">mkAssign</span></a></span></span><span> </span><span id="local-6989586621681049664"><span class="annot"><span class="annottext">CmmReg
</span><a href="#local-6989586621681049664"><span class="hs-identifier hs-var">l</span></a></span></span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.Cmm.Expr.html#CmmReg"><span class="hs-identifier hs-type">CmmReg</span></a></span><span> </span><span id="local-6989586621681049662"><span class="annot"><span class="annottext">CmmReg
</span><a href="#local-6989586621681049662"><span class="hs-identifier hs-var">r</span></a></span></span><span class="hs-special">)</span><span> </span><span class="hs-glyph">|</span><span> </span><span class="annot"><span class="annottext">CmmReg
</span><a href="#local-6989586621681049664"><span class="hs-identifier hs-var">l</span></a></span><span> </span><span class="annot"><span class="annottext">CmmReg -&gt; CmmReg -&gt; Bool
forall a. Eq a =&gt; a -&gt; a -&gt; Bool
</span><span class="hs-operator hs-var">==</span></span><span> </span><span class="annot"><span class="annottext">CmmReg
</span><a href="#local-6989586621681049662"><span class="hs-identifier hs-var">r</span></a></span><span>  </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">CmmAGraph
</span><a href="GHC.Cmm.Graph.html#mkNop"><span class="hs-identifier hs-var">mkNop</span></a></span><span>
</span><span id="line-193"></span><span class="annot"><a href="GHC.Cmm.Graph.html#mkAssign"><span class="hs-identifier hs-var">mkAssign</span></a></span><span> </span><span id="local-6989586621681049661"><span class="annot"><span class="annottext">CmmReg
</span><a href="#local-6989586621681049661"><span class="hs-identifier hs-var">l</span></a></span></span><span> </span><span id="local-6989586621681049660"><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681049660"><span class="hs-identifier hs-var">r</span></a></span></span><span>  </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">CmmNode O O -&gt; CmmAGraph
</span><a href="GHC.Cmm.Graph.html#mkMiddle"><span class="hs-identifier hs-var">mkMiddle</span></a></span><span> </span><span class="annot"><span class="annottext">(CmmNode O O -&gt; CmmAGraph) -&gt; CmmNode O O -&gt; CmmAGraph
forall a b. (a -&gt; b) -&gt; a -&gt; b
</span><a href="../../base/src/GHC.Base.html#%24"><span class="hs-operator hs-var">$</span></a></span><span> </span><span class="annot"><span class="annottext">CmmReg -&gt; CmmExpr -&gt; CmmNode O O
</span><a href="GHC.Cmm.Node.html#CmmAssign"><span class="hs-identifier hs-var">CmmAssign</span></a></span><span> </span><span class="annot"><span class="annottext">CmmReg
</span><a href="#local-6989586621681049661"><span class="hs-identifier hs-var">l</span></a></span><span> </span><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681049660"><span class="hs-identifier hs-var">r</span></a></span><span>
</span><span id="line-194"></span><span>
</span><span id="line-195"></span><span class="annot"><a href="GHC.Cmm.Graph.html#mkStore"><span class="hs-identifier hs-type">mkStore</span></a></span><span>      </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="GHC.Cmm.Expr.html#CmmExpr"><span class="hs-identifier hs-type">CmmExpr</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Cmm.Expr.html#CmmExpr"><span class="hs-identifier hs-type">CmmExpr</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Cmm.Graph.html#CmmAGraph"><span class="hs-identifier hs-type">CmmAGraph</span></a></span><span>
</span><span id="line-196"></span><span id="mkStore"><span class="annot"><span class="annottext">mkStore :: CmmExpr -&gt; CmmExpr -&gt; CmmAGraph
</span><a href="GHC.Cmm.Graph.html#mkStore"><span class="hs-identifier hs-var hs-var">mkStore</span></a></span></span><span>  </span><span id="local-6989586621681049658"><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681049658"><span class="hs-identifier hs-var">l</span></a></span></span><span> </span><span id="local-6989586621681049657"><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681049657"><span class="hs-identifier hs-var">r</span></a></span></span><span>  </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">CmmNode O O -&gt; CmmAGraph
</span><a href="GHC.Cmm.Graph.html#mkMiddle"><span class="hs-identifier hs-var">mkMiddle</span></a></span><span> </span><span class="annot"><span class="annottext">(CmmNode O O -&gt; CmmAGraph) -&gt; CmmNode O O -&gt; CmmAGraph
forall a b. (a -&gt; b) -&gt; a -&gt; b
</span><a href="../../base/src/GHC.Base.html#%24"><span class="hs-operator hs-var">$</span></a></span><span> </span><span class="annot"><span class="annottext">CmmExpr -&gt; CmmExpr -&gt; CmmNode O O
</span><a href="GHC.Cmm.Node.html#CmmStore"><span class="hs-identifier hs-var">CmmStore</span></a></span><span>  </span><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681049658"><span class="hs-identifier hs-var">l</span></a></span><span> </span><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681049657"><span class="hs-identifier hs-var">r</span></a></span><span>
</span><span id="line-197"></span><span>
</span><span id="line-198"></span><span class="hs-comment">---------- Control transfer</span><span>
</span><span id="line-199"></span><span class="annot"><a href="GHC.Cmm.Graph.html#mkJump"><span class="hs-identifier hs-type">mkJump</span></a></span><span>          </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="GHC.Driver.Session.html#DynFlags"><span class="hs-identifier hs-type">DynFlags</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Cmm.Node.html#Convention"><span class="hs-identifier hs-type">Convention</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Cmm.Expr.html#CmmExpr"><span class="hs-identifier hs-type">CmmExpr</span></a></span><span>
</span><span id="line-200"></span><span>                </span><span class="hs-glyph">-&gt;</span><span> </span><span class="hs-special">[</span><span class="annot"><a href="GHC.Cmm.Expr.html#CmmExpr"><span class="hs-identifier hs-type">CmmExpr</span></a></span><span class="hs-special">]</span><span>
</span><span id="line-201"></span><span>                </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Cmm.Node.html#UpdFrameOffset"><span class="hs-identifier hs-type">UpdFrameOffset</span></a></span><span>
</span><span id="line-202"></span><span>                </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Cmm.Graph.html#CmmAGraph"><span class="hs-identifier hs-type">CmmAGraph</span></a></span><span>
</span><span id="line-203"></span><span id="mkJump"><span class="annot"><span class="annottext">mkJump :: DynFlags
-&gt; Convention -&gt; CmmExpr -&gt; [CmmExpr] -&gt; ByteOff -&gt; CmmAGraph
</span><a href="GHC.Cmm.Graph.html#mkJump"><span class="hs-identifier hs-var hs-var">mkJump</span></a></span></span><span> </span><span id="local-6989586621681049654"><span class="annot"><span class="annottext">DynFlags
</span><a href="#local-6989586621681049654"><span class="hs-identifier hs-var">dflags</span></a></span></span><span> </span><span id="local-6989586621681049653"><span class="annot"><span class="annottext">Convention
</span><a href="#local-6989586621681049653"><span class="hs-identifier hs-var">conv</span></a></span></span><span> </span><span id="local-6989586621681049652"><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681049652"><span class="hs-identifier hs-var">e</span></a></span></span><span> </span><span id="local-6989586621681049651"><span class="annot"><span class="annottext">[CmmExpr]
</span><a href="#local-6989586621681049651"><span class="hs-identifier hs-var">actuals</span></a></span></span><span> </span><span id="local-6989586621681049650"><span class="annot"><span class="annottext">ByteOff
</span><a href="#local-6989586621681049650"><span class="hs-identifier hs-var">updfr_off</span></a></span></span><span> </span><span class="hs-glyph">=</span><span>
</span><span id="line-204"></span><span>  </span><span class="annot"><span class="annottext">DynFlags
-&gt; Transfer
-&gt; Area
-&gt; Convention
-&gt; [CmmExpr]
-&gt; ByteOff
-&gt; (ByteOff -&gt; [GlobalReg] -&gt; CmmAGraph)
-&gt; CmmAGraph
</span><a href="GHC.Cmm.Graph.html#lastWithArgs"><span class="hs-identifier hs-var">lastWithArgs</span></a></span><span> </span><span class="annot"><span class="annottext">DynFlags
</span><a href="#local-6989586621681049654"><span class="hs-identifier hs-var">dflags</span></a></span><span> </span><span class="annot"><span class="annottext">Transfer
</span><a href="GHC.Cmm.Graph.html#Jump"><span class="hs-identifier hs-var">Jump</span></a></span><span> </span><span class="annot"><span class="annottext">Area
</span><a href="GHC.Cmm.Expr.html#Old"><span class="hs-identifier hs-var">Old</span></a></span><span> </span><span class="annot"><span class="annottext">Convention
</span><a href="#local-6989586621681049653"><span class="hs-identifier hs-var">conv</span></a></span><span> </span><span class="annot"><span class="annottext">[CmmExpr]
</span><a href="#local-6989586621681049651"><span class="hs-identifier hs-var">actuals</span></a></span><span> </span><span class="annot"><span class="annottext">ByteOff
</span><a href="#local-6989586621681049650"><span class="hs-identifier hs-var">updfr_off</span></a></span><span> </span><span class="annot"><span class="annottext">((ByteOff -&gt; [GlobalReg] -&gt; CmmAGraph) -&gt; CmmAGraph)
-&gt; (ByteOff -&gt; [GlobalReg] -&gt; CmmAGraph) -&gt; CmmAGraph
forall a b. (a -&gt; b) -&gt; a -&gt; b
</span><a href="../../base/src/GHC.Base.html#%24"><span class="hs-operator hs-var">$</span></a></span><span>
</span><span id="line-205"></span><span>    </span><span class="annot"><span class="annottext">CmmExpr
-&gt; Maybe BlockId
-&gt; ByteOff
-&gt; ByteOff
-&gt; ByteOff
-&gt; [GlobalReg]
-&gt; CmmAGraph
</span><a href="GHC.Cmm.Graph.html#toCall"><span class="hs-identifier hs-var">toCall</span></a></span><span> </span><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681049652"><span class="hs-identifier hs-var">e</span></a></span><span> </span><span class="annot"><span class="annottext">Maybe BlockId
forall a. Maybe a
</span><a href="../../base/src/GHC.Maybe.html#Nothing"><span class="hs-identifier hs-var">Nothing</span></a></span><span> </span><span class="annot"><span class="annottext">ByteOff
</span><a href="#local-6989586621681049650"><span class="hs-identifier hs-var">updfr_off</span></a></span><span> </span><span class="annot"><span class="annottext">ByteOff
</span><span class="hs-number">0</span></span><span>
</span><span id="line-206"></span><span>
</span><span id="line-207"></span><span class="hs-comment">-- | A jump where the caller says what the live GlobalRegs are.  Used</span><span>
</span><span id="line-208"></span><span class="hs-comment">-- for low-level hand-written Cmm.</span><span>
</span><span id="line-209"></span><span class="annot"><a href="GHC.Cmm.Graph.html#mkRawJump"><span class="hs-identifier hs-type">mkRawJump</span></a></span><span>       </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="GHC.Driver.Session.html#DynFlags"><span class="hs-identifier hs-type">DynFlags</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Cmm.Expr.html#CmmExpr"><span class="hs-identifier hs-type">CmmExpr</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Cmm.Node.html#UpdFrameOffset"><span class="hs-identifier hs-type">UpdFrameOffset</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="hs-special">[</span><span class="annot"><a href="GHC.Cmm.Expr.html#GlobalReg"><span class="hs-identifier hs-type">GlobalReg</span></a></span><span class="hs-special">]</span><span>
</span><span id="line-210"></span><span>                </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Cmm.Graph.html#CmmAGraph"><span class="hs-identifier hs-type">CmmAGraph</span></a></span><span>
</span><span id="line-211"></span><span id="mkRawJump"><span class="annot"><span class="annottext">mkRawJump :: DynFlags -&gt; CmmExpr -&gt; ByteOff -&gt; [GlobalReg] -&gt; CmmAGraph
</span><a href="GHC.Cmm.Graph.html#mkRawJump"><span class="hs-identifier hs-var hs-var">mkRawJump</span></a></span></span><span> </span><span id="local-6989586621681049646"><span class="annot"><span class="annottext">DynFlags
</span><a href="#local-6989586621681049646"><span class="hs-identifier hs-var">dflags</span></a></span></span><span> </span><span id="local-6989586621681049645"><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681049645"><span class="hs-identifier hs-var">e</span></a></span></span><span> </span><span id="local-6989586621681049644"><span class="annot"><span class="annottext">ByteOff
</span><a href="#local-6989586621681049644"><span class="hs-identifier hs-var">updfr_off</span></a></span></span><span> </span><span id="local-6989586621681049643"><span class="annot"><span class="annottext">[GlobalReg]
</span><a href="#local-6989586621681049643"><span class="hs-identifier hs-var">vols</span></a></span></span><span> </span><span class="hs-glyph">=</span><span>
</span><span id="line-212"></span><span>  </span><span class="annot"><span class="annottext">DynFlags
-&gt; Transfer
-&gt; Area
-&gt; Convention
-&gt; [CmmExpr]
-&gt; ByteOff
-&gt; (ByteOff -&gt; [GlobalReg] -&gt; CmmAGraph)
-&gt; CmmAGraph
</span><a href="GHC.Cmm.Graph.html#lastWithArgs"><span class="hs-identifier hs-var">lastWithArgs</span></a></span><span> </span><span class="annot"><span class="annottext">DynFlags
</span><a href="#local-6989586621681049646"><span class="hs-identifier hs-var">dflags</span></a></span><span> </span><span class="annot"><span class="annottext">Transfer
</span><a href="GHC.Cmm.Graph.html#Jump"><span class="hs-identifier hs-var">Jump</span></a></span><span> </span><span class="annot"><span class="annottext">Area
</span><a href="GHC.Cmm.Expr.html#Old"><span class="hs-identifier hs-var">Old</span></a></span><span> </span><span class="annot"><span class="annottext">Convention
</span><a href="GHC.Cmm.Node.html#NativeNodeCall"><span class="hs-identifier hs-var">NativeNodeCall</span></a></span><span> </span><span class="hs-special">[</span><span class="hs-special">]</span><span> </span><span class="annot"><span class="annottext">ByteOff
</span><a href="#local-6989586621681049644"><span class="hs-identifier hs-var">updfr_off</span></a></span><span> </span><span class="annot"><span class="annottext">((ByteOff -&gt; [GlobalReg] -&gt; CmmAGraph) -&gt; CmmAGraph)
-&gt; (ByteOff -&gt; [GlobalReg] -&gt; CmmAGraph) -&gt; CmmAGraph
forall a b. (a -&gt; b) -&gt; a -&gt; b
</span><a href="../../base/src/GHC.Base.html#%24"><span class="hs-operator hs-var">$</span></a></span><span>
</span><span id="line-213"></span><span>    </span><span class="hs-glyph">\</span><span id="local-6989586621681049641"><span class="annot"><span class="annottext">ByteOff
</span><a href="#local-6989586621681049641"><span class="hs-identifier hs-var">arg_space</span></a></span></span><span> </span><span class="annot"><span class="annottext">[GlobalReg]
</span><span class="hs-identifier">_</span></span><span>  </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><span class="annottext">CmmExpr
-&gt; Maybe BlockId
-&gt; ByteOff
-&gt; ByteOff
-&gt; ByteOff
-&gt; [GlobalReg]
-&gt; CmmAGraph
</span><a href="GHC.Cmm.Graph.html#toCall"><span class="hs-identifier hs-var">toCall</span></a></span><span> </span><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681049645"><span class="hs-identifier hs-var">e</span></a></span><span> </span><span class="annot"><span class="annottext">Maybe BlockId
forall a. Maybe a
</span><a href="../../base/src/GHC.Maybe.html#Nothing"><span class="hs-identifier hs-var">Nothing</span></a></span><span> </span><span class="annot"><span class="annottext">ByteOff
</span><a href="#local-6989586621681049644"><span class="hs-identifier hs-var">updfr_off</span></a></span><span> </span><span class="annot"><span class="annottext">ByteOff
</span><span class="hs-number">0</span></span><span> </span><span class="annot"><span class="annottext">ByteOff
</span><a href="#local-6989586621681049641"><span class="hs-identifier hs-var">arg_space</span></a></span><span> </span><span class="annot"><span class="annottext">[GlobalReg]
</span><a href="#local-6989586621681049643"><span class="hs-identifier hs-var">vols</span></a></span><span>
</span><span id="line-214"></span><span>
</span><span id="line-215"></span><span>
</span><span id="line-216"></span><span class="annot"><a href="GHC.Cmm.Graph.html#mkJumpExtra"><span class="hs-identifier hs-type">mkJumpExtra</span></a></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="GHC.Driver.Session.html#DynFlags"><span class="hs-identifier hs-type">DynFlags</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Cmm.Node.html#Convention"><span class="hs-identifier hs-type">Convention</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Cmm.Expr.html#CmmExpr"><span class="hs-identifier hs-type">CmmExpr</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="hs-special">[</span><span class="annot"><a href="GHC.Cmm.Expr.html#CmmExpr"><span class="hs-identifier hs-type">CmmExpr</span></a></span><span class="hs-special">]</span><span>
</span><span id="line-217"></span><span>                </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Cmm.Node.html#UpdFrameOffset"><span class="hs-identifier hs-type">UpdFrameOffset</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="hs-special">[</span><span class="annot"><a href="GHC.Cmm.Expr.html#CmmExpr"><span class="hs-identifier hs-type">CmmExpr</span></a></span><span class="hs-special">]</span><span>
</span><span id="line-218"></span><span>                </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Cmm.Graph.html#CmmAGraph"><span class="hs-identifier hs-type">CmmAGraph</span></a></span><span>
</span><span id="line-219"></span><span id="mkJumpExtra"><span class="annot"><span class="annottext">mkJumpExtra :: DynFlags
-&gt; Convention
-&gt; CmmExpr
-&gt; [CmmExpr]
-&gt; ByteOff
-&gt; [CmmExpr]
-&gt; CmmAGraph
</span><a href="GHC.Cmm.Graph.html#mkJumpExtra"><span class="hs-identifier hs-var hs-var">mkJumpExtra</span></a></span></span><span> </span><span id="local-6989586621681049640"><span class="annot"><span class="annottext">DynFlags
</span><a href="#local-6989586621681049640"><span class="hs-identifier hs-var">dflags</span></a></span></span><span> </span><span id="local-6989586621681049639"><span class="annot"><span class="annottext">Convention
</span><a href="#local-6989586621681049639"><span class="hs-identifier hs-var">conv</span></a></span></span><span> </span><span id="local-6989586621681049638"><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681049638"><span class="hs-identifier hs-var">e</span></a></span></span><span> </span><span id="local-6989586621681049637"><span class="annot"><span class="annottext">[CmmExpr]
</span><a href="#local-6989586621681049637"><span class="hs-identifier hs-var">actuals</span></a></span></span><span> </span><span id="local-6989586621681049636"><span class="annot"><span class="annottext">ByteOff
</span><a href="#local-6989586621681049636"><span class="hs-identifier hs-var">updfr_off</span></a></span></span><span> </span><span id="local-6989586621681049635"><span class="annot"><span class="annottext">[CmmExpr]
</span><a href="#local-6989586621681049635"><span class="hs-identifier hs-var">extra_stack</span></a></span></span><span> </span><span class="hs-glyph">=</span><span>
</span><span id="line-220"></span><span>  </span><span class="annot"><span class="annottext">DynFlags
-&gt; Transfer
-&gt; Area
-&gt; Convention
-&gt; [CmmExpr]
-&gt; ByteOff
-&gt; [CmmExpr]
-&gt; (ByteOff -&gt; [GlobalReg] -&gt; CmmAGraph)
-&gt; CmmAGraph
</span><a href="GHC.Cmm.Graph.html#lastWithArgsAndExtraStack"><span class="hs-identifier hs-var">lastWithArgsAndExtraStack</span></a></span><span> </span><span class="annot"><span class="annottext">DynFlags
</span><a href="#local-6989586621681049640"><span class="hs-identifier hs-var">dflags</span></a></span><span> </span><span class="annot"><span class="annottext">Transfer
</span><a href="GHC.Cmm.Graph.html#Jump"><span class="hs-identifier hs-var">Jump</span></a></span><span> </span><span class="annot"><span class="annottext">Area
</span><a href="GHC.Cmm.Expr.html#Old"><span class="hs-identifier hs-var">Old</span></a></span><span> </span><span class="annot"><span class="annottext">Convention
</span><a href="#local-6989586621681049639"><span class="hs-identifier hs-var">conv</span></a></span><span> </span><span class="annot"><span class="annottext">[CmmExpr]
</span><a href="#local-6989586621681049637"><span class="hs-identifier hs-var">actuals</span></a></span><span> </span><span class="annot"><span class="annottext">ByteOff
</span><a href="#local-6989586621681049636"><span class="hs-identifier hs-var">updfr_off</span></a></span><span> </span><span class="annot"><span class="annottext">[CmmExpr]
</span><a href="#local-6989586621681049635"><span class="hs-identifier hs-var">extra_stack</span></a></span><span> </span><span class="annot"><span class="annottext">((ByteOff -&gt; [GlobalReg] -&gt; CmmAGraph) -&gt; CmmAGraph)
-&gt; (ByteOff -&gt; [GlobalReg] -&gt; CmmAGraph) -&gt; CmmAGraph
forall a b. (a -&gt; b) -&gt; a -&gt; b
</span><a href="../../base/src/GHC.Base.html#%24"><span class="hs-operator hs-var">$</span></a></span><span>
</span><span id="line-221"></span><span>    </span><span class="annot"><span class="annottext">CmmExpr
-&gt; Maybe BlockId
-&gt; ByteOff
-&gt; ByteOff
-&gt; ByteOff
-&gt; [GlobalReg]
-&gt; CmmAGraph
</span><a href="GHC.Cmm.Graph.html#toCall"><span class="hs-identifier hs-var">toCall</span></a></span><span> </span><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681049638"><span class="hs-identifier hs-var">e</span></a></span><span> </span><span class="annot"><span class="annottext">Maybe BlockId
forall a. Maybe a
</span><a href="../../base/src/GHC.Maybe.html#Nothing"><span class="hs-identifier hs-var">Nothing</span></a></span><span> </span><span class="annot"><span class="annottext">ByteOff
</span><a href="#local-6989586621681049636"><span class="hs-identifier hs-var">updfr_off</span></a></span><span> </span><span class="annot"><span class="annottext">ByteOff
</span><span class="hs-number">0</span></span><span>
</span><span id="line-222"></span><span>
</span><span id="line-223"></span><span class="annot"><a href="GHC.Cmm.Graph.html#mkCbranch"><span class="hs-identifier hs-type">mkCbranch</span></a></span><span>       </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="GHC.Cmm.Expr.html#CmmExpr"><span class="hs-identifier hs-type">CmmExpr</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Cmm.BlockId.html#BlockId"><span class="hs-identifier hs-type">BlockId</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Cmm.BlockId.html#BlockId"><span class="hs-identifier hs-type">BlockId</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="../../base/src/GHC.Maybe.html#Maybe"><span class="hs-identifier hs-type">Maybe</span></a></span><span> </span><span class="annot"><span class="hs-identifier hs-type">Bool</span></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Cmm.Graph.html#CmmAGraph"><span class="hs-identifier hs-type">CmmAGraph</span></a></span><span>
</span><span id="line-224"></span><span id="mkCbranch"><span class="annot"><span class="annottext">mkCbranch :: CmmExpr -&gt; BlockId -&gt; BlockId -&gt; Maybe Bool -&gt; CmmAGraph
</span><a href="GHC.Cmm.Graph.html#mkCbranch"><span class="hs-identifier hs-var hs-var">mkCbranch</span></a></span></span><span> </span><span id="local-6989586621681049633"><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681049633"><span class="hs-identifier hs-var">pred</span></a></span></span><span> </span><span id="local-6989586621681049632"><span class="annot"><span class="annottext">BlockId
</span><a href="#local-6989586621681049632"><span class="hs-identifier hs-var">ifso</span></a></span></span><span> </span><span id="local-6989586621681049631"><span class="annot"><span class="annottext">BlockId
</span><a href="#local-6989586621681049631"><span class="hs-identifier hs-var">ifnot</span></a></span></span><span> </span><span id="local-6989586621681049630"><span class="annot"><span class="annottext">Maybe Bool
</span><a href="#local-6989586621681049630"><span class="hs-identifier hs-var">likely</span></a></span></span><span> </span><span class="hs-glyph">=</span><span>
</span><span id="line-225"></span><span>  </span><span class="annot"><span class="annottext">CmmNode O C -&gt; CmmAGraph
</span><a href="GHC.Cmm.Graph.html#mkLast"><span class="hs-identifier hs-var">mkLast</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">CmmExpr -&gt; BlockId -&gt; BlockId -&gt; Maybe Bool -&gt; CmmNode O C
</span><a href="GHC.Cmm.Node.html#CmmCondBranch"><span class="hs-identifier hs-var">CmmCondBranch</span></a></span><span> </span><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681049633"><span class="hs-identifier hs-var">pred</span></a></span><span> </span><span class="annot"><span class="annottext">BlockId
</span><a href="#local-6989586621681049632"><span class="hs-identifier hs-var">ifso</span></a></span><span> </span><span class="annot"><span class="annottext">BlockId
</span><a href="#local-6989586621681049631"><span class="hs-identifier hs-var">ifnot</span></a></span><span> </span><span class="annot"><span class="annottext">Maybe Bool
</span><a href="#local-6989586621681049630"><span class="hs-identifier hs-var">likely</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-226"></span><span>
</span><span id="line-227"></span><span class="annot"><a href="GHC.Cmm.Graph.html#mkSwitch"><span class="hs-identifier hs-type">mkSwitch</span></a></span><span>        </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="GHC.Cmm.Expr.html#CmmExpr"><span class="hs-identifier hs-type">CmmExpr</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Cmm.Switch.html#SwitchTargets"><span class="hs-identifier hs-type">SwitchTargets</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Cmm.Graph.html#CmmAGraph"><span class="hs-identifier hs-type">CmmAGraph</span></a></span><span>
</span><span id="line-228"></span><span id="mkSwitch"><span class="annot"><span class="annottext">mkSwitch :: CmmExpr -&gt; SwitchTargets -&gt; CmmAGraph
</span><a href="GHC.Cmm.Graph.html#mkSwitch"><span class="hs-identifier hs-var hs-var">mkSwitch</span></a></span></span><span> </span><span id="local-6989586621681049628"><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681049628"><span class="hs-identifier hs-var">e</span></a></span></span><span> </span><span id="local-6989586621681049627"><span class="annot"><span class="annottext">SwitchTargets
</span><a href="#local-6989586621681049627"><span class="hs-identifier hs-var">tbl</span></a></span></span><span>   </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">CmmNode O C -&gt; CmmAGraph
</span><a href="GHC.Cmm.Graph.html#mkLast"><span class="hs-identifier hs-var">mkLast</span></a></span><span> </span><span class="annot"><span class="annottext">(CmmNode O C -&gt; CmmAGraph) -&gt; CmmNode O C -&gt; CmmAGraph
forall a b. (a -&gt; b) -&gt; a -&gt; b
</span><a href="../../base/src/GHC.Base.html#%24"><span class="hs-operator hs-var">$</span></a></span><span> </span><span class="annot"><span class="annottext">CmmExpr -&gt; SwitchTargets -&gt; CmmNode O C
</span><a href="GHC.Cmm.Node.html#CmmSwitch"><span class="hs-identifier hs-var">CmmSwitch</span></a></span><span> </span><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681049628"><span class="hs-identifier hs-var">e</span></a></span><span> </span><span class="annot"><span class="annottext">SwitchTargets
</span><a href="#local-6989586621681049627"><span class="hs-identifier hs-var">tbl</span></a></span><span>
</span><span id="line-229"></span><span>
</span><span id="line-230"></span><span class="annot"><a href="GHC.Cmm.Graph.html#mkReturn"><span class="hs-identifier hs-type">mkReturn</span></a></span><span>        </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="GHC.Driver.Session.html#DynFlags"><span class="hs-identifier hs-type">DynFlags</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Cmm.Expr.html#CmmExpr"><span class="hs-identifier hs-type">CmmExpr</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="hs-special">[</span><span class="annot"><a href="GHC.Cmm.Expr.html#CmmExpr"><span class="hs-identifier hs-type">CmmExpr</span></a></span><span class="hs-special">]</span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Cmm.Node.html#UpdFrameOffset"><span class="hs-identifier hs-type">UpdFrameOffset</span></a></span><span>
</span><span id="line-231"></span><span>                </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Cmm.Graph.html#CmmAGraph"><span class="hs-identifier hs-type">CmmAGraph</span></a></span><span>
</span><span id="line-232"></span><span id="mkReturn"><span class="annot"><span class="annottext">mkReturn :: DynFlags -&gt; CmmExpr -&gt; [CmmExpr] -&gt; ByteOff -&gt; CmmAGraph
</span><a href="GHC.Cmm.Graph.html#mkReturn"><span class="hs-identifier hs-var hs-var">mkReturn</span></a></span></span><span> </span><span id="local-6989586621681049625"><span class="annot"><span class="annottext">DynFlags
</span><a href="#local-6989586621681049625"><span class="hs-identifier hs-var">dflags</span></a></span></span><span> </span><span id="local-6989586621681049624"><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681049624"><span class="hs-identifier hs-var">e</span></a></span></span><span> </span><span id="local-6989586621681049623"><span class="annot"><span class="annottext">[CmmExpr]
</span><a href="#local-6989586621681049623"><span class="hs-identifier hs-var">actuals</span></a></span></span><span> </span><span id="local-6989586621681049622"><span class="annot"><span class="annottext">ByteOff
</span><a href="#local-6989586621681049622"><span class="hs-identifier hs-var">updfr_off</span></a></span></span><span> </span><span class="hs-glyph">=</span><span>
</span><span id="line-233"></span><span>  </span><span class="annot"><span class="annottext">DynFlags
-&gt; Transfer
-&gt; Area
-&gt; Convention
-&gt; [CmmExpr]
-&gt; ByteOff
-&gt; (ByteOff -&gt; [GlobalReg] -&gt; CmmAGraph)
-&gt; CmmAGraph
</span><a href="GHC.Cmm.Graph.html#lastWithArgs"><span class="hs-identifier hs-var">lastWithArgs</span></a></span><span> </span><span class="annot"><span class="annottext">DynFlags
</span><a href="#local-6989586621681049625"><span class="hs-identifier hs-var">dflags</span></a></span><span> </span><span class="annot"><span class="annottext">Transfer
</span><a href="GHC.Cmm.Graph.html#Ret"><span class="hs-identifier hs-var">Ret</span></a></span><span>  </span><span class="annot"><span class="annottext">Area
</span><a href="GHC.Cmm.Expr.html#Old"><span class="hs-identifier hs-var">Old</span></a></span><span> </span><span class="annot"><span class="annottext">Convention
</span><a href="GHC.Cmm.Node.html#NativeReturn"><span class="hs-identifier hs-var">NativeReturn</span></a></span><span> </span><span class="annot"><span class="annottext">[CmmExpr]
</span><a href="#local-6989586621681049623"><span class="hs-identifier hs-var">actuals</span></a></span><span> </span><span class="annot"><span class="annottext">ByteOff
</span><a href="#local-6989586621681049622"><span class="hs-identifier hs-var">updfr_off</span></a></span><span> </span><span class="annot"><span class="annottext">((ByteOff -&gt; [GlobalReg] -&gt; CmmAGraph) -&gt; CmmAGraph)
-&gt; (ByteOff -&gt; [GlobalReg] -&gt; CmmAGraph) -&gt; CmmAGraph
forall a b. (a -&gt; b) -&gt; a -&gt; b
</span><a href="../../base/src/GHC.Base.html#%24"><span class="hs-operator hs-var">$</span></a></span><span>
</span><span id="line-234"></span><span>    </span><span class="annot"><span class="annottext">CmmExpr
-&gt; Maybe BlockId
-&gt; ByteOff
-&gt; ByteOff
-&gt; ByteOff
-&gt; [GlobalReg]
-&gt; CmmAGraph
</span><a href="GHC.Cmm.Graph.html#toCall"><span class="hs-identifier hs-var">toCall</span></a></span><span> </span><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681049624"><span class="hs-identifier hs-var">e</span></a></span><span> </span><span class="annot"><span class="annottext">Maybe BlockId
forall a. Maybe a
</span><a href="../../base/src/GHC.Maybe.html#Nothing"><span class="hs-identifier hs-var">Nothing</span></a></span><span> </span><span class="annot"><span class="annottext">ByteOff
</span><a href="#local-6989586621681049622"><span class="hs-identifier hs-var">updfr_off</span></a></span><span> </span><span class="annot"><span class="annottext">ByteOff
</span><span class="hs-number">0</span></span><span>
</span><span id="line-235"></span><span>
</span><span id="line-236"></span><span class="annot"><a href="GHC.Cmm.Graph.html#mkBranch"><span class="hs-identifier hs-type">mkBranch</span></a></span><span>        </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="GHC.Cmm.BlockId.html#BlockId"><span class="hs-identifier hs-type">BlockId</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Cmm.Graph.html#CmmAGraph"><span class="hs-identifier hs-type">CmmAGraph</span></a></span><span>
</span><span id="line-237"></span><span id="mkBranch"><span class="annot"><span class="annottext">mkBranch :: BlockId -&gt; CmmAGraph
</span><a href="GHC.Cmm.Graph.html#mkBranch"><span class="hs-identifier hs-var hs-var">mkBranch</span></a></span></span><span> </span><span id="local-6989586621681049619"><span class="annot"><span class="annottext">BlockId
</span><a href="#local-6989586621681049619"><span class="hs-identifier hs-var">bid</span></a></span></span><span>     </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">CmmNode O C -&gt; CmmAGraph
</span><a href="GHC.Cmm.Graph.html#mkLast"><span class="hs-identifier hs-var">mkLast</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">BlockId -&gt; CmmNode O C
</span><a href="GHC.Cmm.Node.html#CmmBranch"><span class="hs-identifier hs-var">CmmBranch</span></a></span><span> </span><span class="annot"><span class="annottext">BlockId
</span><a href="#local-6989586621681049619"><span class="hs-identifier hs-var">bid</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-238"></span><span>
</span><span id="line-239"></span><span class="annot"><a href="GHC.Cmm.Graph.html#mkFinalCall"><span class="hs-identifier hs-type">mkFinalCall</span></a></span><span>   </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="GHC.Driver.Session.html#DynFlags"><span class="hs-identifier hs-type">DynFlags</span></a></span><span>
</span><span id="line-240"></span><span>              </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Cmm.Expr.html#CmmExpr"><span class="hs-identifier hs-type">CmmExpr</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Types.ForeignCall.html#CCallConv"><span class="hs-identifier hs-type">CCallConv</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="hs-special">[</span><span class="annot"><a href="GHC.Cmm.Expr.html#CmmExpr"><span class="hs-identifier hs-type">CmmExpr</span></a></span><span class="hs-special">]</span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Cmm.Node.html#UpdFrameOffset"><span class="hs-identifier hs-type">UpdFrameOffset</span></a></span><span>
</span><span id="line-241"></span><span>              </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Cmm.Graph.html#CmmAGraph"><span class="hs-identifier hs-type">CmmAGraph</span></a></span><span>
</span><span id="line-242"></span><span id="mkFinalCall"><span class="annot"><span class="annottext">mkFinalCall :: DynFlags
-&gt; CmmExpr -&gt; CCallConv -&gt; [CmmExpr] -&gt; ByteOff -&gt; CmmAGraph
</span><a href="GHC.Cmm.Graph.html#mkFinalCall"><span class="hs-identifier hs-var hs-var">mkFinalCall</span></a></span></span><span> </span><span id="local-6989586621681049618"><span class="annot"><span class="annottext">DynFlags
</span><a href="#local-6989586621681049618"><span class="hs-identifier hs-var">dflags</span></a></span></span><span> </span><span id="local-6989586621681049617"><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681049617"><span class="hs-identifier hs-var">f</span></a></span></span><span> </span><span class="annot"><span class="annottext">CCallConv
</span><span class="hs-identifier">_</span></span><span> </span><span id="local-6989586621681049616"><span class="annot"><span class="annottext">[CmmExpr]
</span><a href="#local-6989586621681049616"><span class="hs-identifier hs-var">actuals</span></a></span></span><span> </span><span id="local-6989586621681049615"><span class="annot"><span class="annottext">ByteOff
</span><a href="#local-6989586621681049615"><span class="hs-identifier hs-var">updfr_off</span></a></span></span><span> </span><span class="hs-glyph">=</span><span>
</span><span id="line-243"></span><span>  </span><span class="annot"><span class="annottext">DynFlags
-&gt; Transfer
-&gt; Area
-&gt; Convention
-&gt; [CmmExpr]
-&gt; ByteOff
-&gt; (ByteOff -&gt; [GlobalReg] -&gt; CmmAGraph)
-&gt; CmmAGraph
</span><a href="GHC.Cmm.Graph.html#lastWithArgs"><span class="hs-identifier hs-var">lastWithArgs</span></a></span><span> </span><span class="annot"><span class="annottext">DynFlags
</span><a href="#local-6989586621681049618"><span class="hs-identifier hs-var">dflags</span></a></span><span> </span><span class="annot"><span class="annottext">Transfer
</span><a href="GHC.Cmm.Graph.html#Call"><span class="hs-identifier hs-var">Call</span></a></span><span> </span><span class="annot"><span class="annottext">Area
</span><a href="GHC.Cmm.Expr.html#Old"><span class="hs-identifier hs-var">Old</span></a></span><span> </span><span class="annot"><span class="annottext">Convention
</span><a href="GHC.Cmm.Node.html#NativeDirectCall"><span class="hs-identifier hs-var">NativeDirectCall</span></a></span><span> </span><span class="annot"><span class="annottext">[CmmExpr]
</span><a href="#local-6989586621681049616"><span class="hs-identifier hs-var">actuals</span></a></span><span> </span><span class="annot"><span class="annottext">ByteOff
</span><a href="#local-6989586621681049615"><span class="hs-identifier hs-var">updfr_off</span></a></span><span> </span><span class="annot"><span class="annottext">((ByteOff -&gt; [GlobalReg] -&gt; CmmAGraph) -&gt; CmmAGraph)
-&gt; (ByteOff -&gt; [GlobalReg] -&gt; CmmAGraph) -&gt; CmmAGraph
forall a b. (a -&gt; b) -&gt; a -&gt; b
</span><a href="../../base/src/GHC.Base.html#%24"><span class="hs-operator hs-var">$</span></a></span><span>
</span><span id="line-244"></span><span>    </span><span class="annot"><span class="annottext">CmmExpr
-&gt; Maybe BlockId
-&gt; ByteOff
-&gt; ByteOff
-&gt; ByteOff
-&gt; [GlobalReg]
-&gt; CmmAGraph
</span><a href="GHC.Cmm.Graph.html#toCall"><span class="hs-identifier hs-var">toCall</span></a></span><span> </span><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681049617"><span class="hs-identifier hs-var">f</span></a></span><span> </span><span class="annot"><span class="annottext">Maybe BlockId
forall a. Maybe a
</span><a href="../../base/src/GHC.Maybe.html#Nothing"><span class="hs-identifier hs-var">Nothing</span></a></span><span> </span><span class="annot"><span class="annottext">ByteOff
</span><a href="#local-6989586621681049615"><span class="hs-identifier hs-var">updfr_off</span></a></span><span> </span><span class="annot"><span class="annottext">ByteOff
</span><span class="hs-number">0</span></span><span>
</span><span id="line-245"></span><span>
</span><span id="line-246"></span><span class="annot"><a href="GHC.Cmm.Graph.html#mkCallReturnsTo"><span class="hs-identifier hs-type">mkCallReturnsTo</span></a></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="GHC.Driver.Session.html#DynFlags"><span class="hs-identifier hs-type">DynFlags</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Cmm.Expr.html#CmmExpr"><span class="hs-identifier hs-type">CmmExpr</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Cmm.Node.html#Convention"><span class="hs-identifier hs-type">Convention</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="hs-special">[</span><span class="annot"><a href="GHC.Cmm.Expr.html#CmmExpr"><span class="hs-identifier hs-type">CmmExpr</span></a></span><span class="hs-special">]</span><span>
</span><span id="line-247"></span><span>                </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Cmm.BlockId.html#BlockId"><span class="hs-identifier hs-type">BlockId</span></a></span><span>
</span><span id="line-248"></span><span>                </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Runtime.Heap.Layout.html#ByteOff"><span class="hs-identifier hs-type">ByteOff</span></a></span><span>
</span><span id="line-249"></span><span>                </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Cmm.Node.html#UpdFrameOffset"><span class="hs-identifier hs-type">UpdFrameOffset</span></a></span><span>
</span><span id="line-250"></span><span>                </span><span class="hs-glyph">-&gt;</span><span> </span><span class="hs-special">[</span><span class="annot"><a href="GHC.Cmm.Expr.html#CmmExpr"><span class="hs-identifier hs-type">CmmExpr</span></a></span><span class="hs-special">]</span><span>
</span><span id="line-251"></span><span>                </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Cmm.Graph.html#CmmAGraph"><span class="hs-identifier hs-type">CmmAGraph</span></a></span><span>
</span><span id="line-252"></span><span id="mkCallReturnsTo"><span class="annot"><span class="annottext">mkCallReturnsTo :: DynFlags
-&gt; CmmExpr
-&gt; Convention
-&gt; [CmmExpr]
-&gt; BlockId
-&gt; ByteOff
-&gt; ByteOff
-&gt; [CmmExpr]
-&gt; CmmAGraph
</span><a href="GHC.Cmm.Graph.html#mkCallReturnsTo"><span class="hs-identifier hs-var hs-var">mkCallReturnsTo</span></a></span></span><span> </span><span id="local-6989586621681049612"><span class="annot"><span class="annottext">DynFlags
</span><a href="#local-6989586621681049612"><span class="hs-identifier hs-var">dflags</span></a></span></span><span> </span><span id="local-6989586621681049611"><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681049611"><span class="hs-identifier hs-var">f</span></a></span></span><span> </span><span id="local-6989586621681049610"><span class="annot"><span class="annottext">Convention
</span><a href="#local-6989586621681049610"><span class="hs-identifier hs-var">callConv</span></a></span></span><span> </span><span id="local-6989586621681049609"><span class="annot"><span class="annottext">[CmmExpr]
</span><a href="#local-6989586621681049609"><span class="hs-identifier hs-var">actuals</span></a></span></span><span> </span><span id="local-6989586621681049608"><span class="annot"><span class="annottext">BlockId
</span><a href="#local-6989586621681049608"><span class="hs-identifier hs-var">ret_lbl</span></a></span></span><span> </span><span id="local-6989586621681049607"><span class="annot"><span class="annottext">ByteOff
</span><a href="#local-6989586621681049607"><span class="hs-identifier hs-var">ret_off</span></a></span></span><span> </span><span id="local-6989586621681049606"><span class="annot"><span class="annottext">ByteOff
</span><a href="#local-6989586621681049606"><span class="hs-identifier hs-var">updfr_off</span></a></span></span><span> </span><span id="local-6989586621681049605"><span class="annot"><span class="annottext">[CmmExpr]
</span><a href="#local-6989586621681049605"><span class="hs-identifier hs-var">extra_stack</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-keyword">do</span><span>
</span><span id="line-253"></span><span>  </span><span class="annot"><span class="annottext">DynFlags
-&gt; Transfer
-&gt; Area
-&gt; Convention
-&gt; [CmmExpr]
-&gt; ByteOff
-&gt; [CmmExpr]
-&gt; (ByteOff -&gt; [GlobalReg] -&gt; CmmAGraph)
-&gt; CmmAGraph
</span><a href="GHC.Cmm.Graph.html#lastWithArgsAndExtraStack"><span class="hs-identifier hs-var">lastWithArgsAndExtraStack</span></a></span><span> </span><span class="annot"><span class="annottext">DynFlags
</span><a href="#local-6989586621681049612"><span class="hs-identifier hs-var">dflags</span></a></span><span> </span><span class="annot"><span class="annottext">Transfer
</span><a href="GHC.Cmm.Graph.html#Call"><span class="hs-identifier hs-var">Call</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">BlockId -&gt; Area
</span><a href="GHC.Cmm.Expr.html#Young"><span class="hs-identifier hs-var">Young</span></a></span><span> </span><span class="annot"><span class="annottext">BlockId
</span><a href="#local-6989586621681049608"><span class="hs-identifier hs-var">ret_lbl</span></a></span><span class="hs-special">)</span><span> </span><span class="annot"><span class="annottext">Convention
</span><a href="#local-6989586621681049610"><span class="hs-identifier hs-var">callConv</span></a></span><span> </span><span class="annot"><span class="annottext">[CmmExpr]
</span><a href="#local-6989586621681049609"><span class="hs-identifier hs-var">actuals</span></a></span><span>
</span><span id="line-254"></span><span>     </span><span class="annot"><span class="annottext">ByteOff
</span><a href="#local-6989586621681049606"><span class="hs-identifier hs-var">updfr_off</span></a></span><span> </span><span class="annot"><span class="annottext">[CmmExpr]
</span><a href="#local-6989586621681049605"><span class="hs-identifier hs-var">extra_stack</span></a></span><span> </span><span class="annot"><span class="annottext">((ByteOff -&gt; [GlobalReg] -&gt; CmmAGraph) -&gt; CmmAGraph)
-&gt; (ByteOff -&gt; [GlobalReg] -&gt; CmmAGraph) -&gt; CmmAGraph
forall a b. (a -&gt; b) -&gt; a -&gt; b
</span><a href="../../base/src/GHC.Base.html#%24"><span class="hs-operator hs-var">$</span></a></span><span>
</span><span id="line-255"></span><span>       </span><span class="annot"><span class="annottext">CmmExpr
-&gt; Maybe BlockId
-&gt; ByteOff
-&gt; ByteOff
-&gt; ByteOff
-&gt; [GlobalReg]
-&gt; CmmAGraph
</span><a href="GHC.Cmm.Graph.html#toCall"><span class="hs-identifier hs-var">toCall</span></a></span><span> </span><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681049611"><span class="hs-identifier hs-var">f</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">BlockId -&gt; Maybe BlockId
forall a. a -&gt; Maybe a
</span><a href="../../base/src/GHC.Maybe.html#Just"><span class="hs-identifier hs-var">Just</span></a></span><span> </span><span class="annot"><span class="annottext">BlockId
</span><a href="#local-6989586621681049608"><span class="hs-identifier hs-var">ret_lbl</span></a></span><span class="hs-special">)</span><span> </span><span class="annot"><span class="annottext">ByteOff
</span><a href="#local-6989586621681049606"><span class="hs-identifier hs-var">updfr_off</span></a></span><span> </span><span class="annot"><span class="annottext">ByteOff
</span><a href="#local-6989586621681049607"><span class="hs-identifier hs-var">ret_off</span></a></span><span>
</span><span id="line-256"></span><span>
</span><span id="line-257"></span><span class="hs-comment">-- Like mkCallReturnsTo, but does not push the return address (it is assumed to be</span><span>
</span><span id="line-258"></span><span class="hs-comment">-- already on the stack).</span><span>
</span><span id="line-259"></span><span class="annot"><a href="GHC.Cmm.Graph.html#mkJumpReturnsTo"><span class="hs-identifier hs-type">mkJumpReturnsTo</span></a></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="GHC.Driver.Session.html#DynFlags"><span class="hs-identifier hs-type">DynFlags</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Cmm.Expr.html#CmmExpr"><span class="hs-identifier hs-type">CmmExpr</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Cmm.Node.html#Convention"><span class="hs-identifier hs-type">Convention</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="hs-special">[</span><span class="annot"><a href="GHC.Cmm.Expr.html#CmmExpr"><span class="hs-identifier hs-type">CmmExpr</span></a></span><span class="hs-special">]</span><span>
</span><span id="line-260"></span><span>                </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Cmm.BlockId.html#BlockId"><span class="hs-identifier hs-type">BlockId</span></a></span><span>
</span><span id="line-261"></span><span>                </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Runtime.Heap.Layout.html#ByteOff"><span class="hs-identifier hs-type">ByteOff</span></a></span><span>
</span><span id="line-262"></span><span>                </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Cmm.Node.html#UpdFrameOffset"><span class="hs-identifier hs-type">UpdFrameOffset</span></a></span><span>
</span><span id="line-263"></span><span>                </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Cmm.Graph.html#CmmAGraph"><span class="hs-identifier hs-type">CmmAGraph</span></a></span><span>
</span><span id="line-264"></span><span id="mkJumpReturnsTo"><span class="annot"><span class="annottext">mkJumpReturnsTo :: DynFlags
-&gt; CmmExpr
-&gt; Convention
-&gt; [CmmExpr]
-&gt; BlockId
-&gt; ByteOff
-&gt; ByteOff
-&gt; CmmAGraph
</span><a href="GHC.Cmm.Graph.html#mkJumpReturnsTo"><span class="hs-identifier hs-var hs-var">mkJumpReturnsTo</span></a></span></span><span> </span><span id="local-6989586621681049603"><span class="annot"><span class="annottext">DynFlags
</span><a href="#local-6989586621681049603"><span class="hs-identifier hs-var">dflags</span></a></span></span><span> </span><span id="local-6989586621681049602"><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681049602"><span class="hs-identifier hs-var">f</span></a></span></span><span> </span><span id="local-6989586621681049601"><span class="annot"><span class="annottext">Convention
</span><a href="#local-6989586621681049601"><span class="hs-identifier hs-var">callConv</span></a></span></span><span> </span><span id="local-6989586621681049600"><span class="annot"><span class="annottext">[CmmExpr]
</span><a href="#local-6989586621681049600"><span class="hs-identifier hs-var">actuals</span></a></span></span><span> </span><span id="local-6989586621681049599"><span class="annot"><span class="annottext">BlockId
</span><a href="#local-6989586621681049599"><span class="hs-identifier hs-var">ret_lbl</span></a></span></span><span> </span><span id="local-6989586621681049598"><span class="annot"><span class="annottext">ByteOff
</span><a href="#local-6989586621681049598"><span class="hs-identifier hs-var">ret_off</span></a></span></span><span> </span><span id="local-6989586621681049597"><span class="annot"><span class="annottext">ByteOff
</span><a href="#local-6989586621681049597"><span class="hs-identifier hs-var">updfr_off</span></a></span></span><span>  </span><span class="hs-glyph">=</span><span> </span><span class="hs-keyword">do</span><span>
</span><span id="line-265"></span><span>  </span><span class="annot"><span class="annottext">DynFlags
-&gt; Transfer
-&gt; Area
-&gt; Convention
-&gt; [CmmExpr]
-&gt; ByteOff
-&gt; (ByteOff -&gt; [GlobalReg] -&gt; CmmAGraph)
-&gt; CmmAGraph
</span><a href="GHC.Cmm.Graph.html#lastWithArgs"><span class="hs-identifier hs-var">lastWithArgs</span></a></span><span> </span><span class="annot"><span class="annottext">DynFlags
</span><a href="#local-6989586621681049603"><span class="hs-identifier hs-var">dflags</span></a></span><span> </span><span class="annot"><span class="annottext">Transfer
</span><a href="GHC.Cmm.Graph.html#JumpRet"><span class="hs-identifier hs-var">JumpRet</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">BlockId -&gt; Area
</span><a href="GHC.Cmm.Expr.html#Young"><span class="hs-identifier hs-var">Young</span></a></span><span> </span><span class="annot"><span class="annottext">BlockId
</span><a href="#local-6989586621681049599"><span class="hs-identifier hs-var">ret_lbl</span></a></span><span class="hs-special">)</span><span> </span><span class="annot"><span class="annottext">Convention
</span><a href="#local-6989586621681049601"><span class="hs-identifier hs-var">callConv</span></a></span><span> </span><span class="annot"><span class="annottext">[CmmExpr]
</span><a href="#local-6989586621681049600"><span class="hs-identifier hs-var">actuals</span></a></span><span> </span><span class="annot"><span class="annottext">ByteOff
</span><a href="#local-6989586621681049597"><span class="hs-identifier hs-var">updfr_off</span></a></span><span> </span><span class="annot"><span class="annottext">((ByteOff -&gt; [GlobalReg] -&gt; CmmAGraph) -&gt; CmmAGraph)
-&gt; (ByteOff -&gt; [GlobalReg] -&gt; CmmAGraph) -&gt; CmmAGraph
forall a b. (a -&gt; b) -&gt; a -&gt; b
</span><a href="../../base/src/GHC.Base.html#%24"><span class="hs-operator hs-var">$</span></a></span><span>
</span><span id="line-266"></span><span>       </span><span class="annot"><span class="annottext">CmmExpr
-&gt; Maybe BlockId
-&gt; ByteOff
-&gt; ByteOff
-&gt; ByteOff
-&gt; [GlobalReg]
-&gt; CmmAGraph
</span><a href="GHC.Cmm.Graph.html#toCall"><span class="hs-identifier hs-var">toCall</span></a></span><span> </span><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681049602"><span class="hs-identifier hs-var">f</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">BlockId -&gt; Maybe BlockId
forall a. a -&gt; Maybe a
</span><a href="../../base/src/GHC.Maybe.html#Just"><span class="hs-identifier hs-var">Just</span></a></span><span> </span><span class="annot"><span class="annottext">BlockId
</span><a href="#local-6989586621681049599"><span class="hs-identifier hs-var">ret_lbl</span></a></span><span class="hs-special">)</span><span> </span><span class="annot"><span class="annottext">ByteOff
</span><a href="#local-6989586621681049597"><span class="hs-identifier hs-var">updfr_off</span></a></span><span> </span><span class="annot"><span class="annottext">ByteOff
</span><a href="#local-6989586621681049598"><span class="hs-identifier hs-var">ret_off</span></a></span><span>
</span><span id="line-267"></span><span>
</span><span id="line-268"></span><span class="annot"><a href="GHC.Cmm.Graph.html#mkUnsafeCall"><span class="hs-identifier hs-type">mkUnsafeCall</span></a></span><span>  </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="GHC.Cmm.Node.html#ForeignTarget"><span class="hs-identifier hs-type">ForeignTarget</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="hs-special">[</span><span class="annot"><a href="GHC.Cmm.Node.html#CmmFormal"><span class="hs-identifier hs-type">CmmFormal</span></a></span><span class="hs-special">]</span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="hs-special">[</span><span class="annot"><a href="GHC.Cmm.Node.html#CmmActual"><span class="hs-identifier hs-type">CmmActual</span></a></span><span class="hs-special">]</span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Cmm.Graph.html#CmmAGraph"><span class="hs-identifier hs-type">CmmAGraph</span></a></span><span>
</span><span id="line-269"></span><span id="mkUnsafeCall"><span class="annot"><span class="annottext">mkUnsafeCall :: ForeignTarget -&gt; [CmmFormal] -&gt; [CmmExpr] -&gt; CmmAGraph
</span><a href="GHC.Cmm.Graph.html#mkUnsafeCall"><span class="hs-identifier hs-var hs-var">mkUnsafeCall</span></a></span></span><span> </span><span id="local-6989586621681049594"><span class="annot"><span class="annottext">ForeignTarget
</span><a href="#local-6989586621681049594"><span class="hs-identifier hs-var">t</span></a></span></span><span> </span><span id="local-6989586621681049593"><span class="annot"><span class="annottext">[CmmFormal]
</span><a href="#local-6989586621681049593"><span class="hs-identifier hs-var">fs</span></a></span></span><span> </span><span id="local-6989586621681049592"><span class="annot"><span class="annottext">[CmmExpr]
</span><a href="#local-6989586621681049592"><span class="hs-keyword hs-var">as</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">CmmNode O O -&gt; CmmAGraph
</span><a href="GHC.Cmm.Graph.html#mkMiddle"><span class="hs-identifier hs-var">mkMiddle</span></a></span><span> </span><span class="annot"><span class="annottext">(CmmNode O O -&gt; CmmAGraph) -&gt; CmmNode O O -&gt; CmmAGraph
forall a b. (a -&gt; b) -&gt; a -&gt; b
</span><a href="../../base/src/GHC.Base.html#%24"><span class="hs-operator hs-var">$</span></a></span><span> </span><span class="annot"><span class="annottext">ForeignTarget -&gt; [CmmFormal] -&gt; [CmmExpr] -&gt; CmmNode O O
</span><a href="GHC.Cmm.Node.html#CmmUnsafeForeignCall"><span class="hs-identifier hs-var">CmmUnsafeForeignCall</span></a></span><span> </span><span class="annot"><span class="annottext">ForeignTarget
</span><a href="#local-6989586621681049594"><span class="hs-identifier hs-var">t</span></a></span><span> </span><span class="annot"><span class="annottext">[CmmFormal]
</span><a href="#local-6989586621681049593"><span class="hs-identifier hs-var">fs</span></a></span><span> </span><span class="annot"><span class="annottext">[CmmExpr]
</span><a href="#local-6989586621681049592"><span class="hs-keyword hs-var">as</span></a></span><span>
</span><span id="line-270"></span><span>
</span><span id="line-271"></span><span class="hs-comment">-- | Construct a 'CmmUnwind' node for the given register and unwinding</span><span>
</span><span id="line-272"></span><span class="hs-comment">-- expression.</span><span>
</span><span id="line-273"></span><span class="annot"><a href="GHC.Cmm.Graph.html#mkUnwind"><span class="hs-identifier hs-type">mkUnwind</span></a></span><span>     </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="GHC.Cmm.Expr.html#GlobalReg"><span class="hs-identifier hs-type">GlobalReg</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Cmm.Expr.html#CmmExpr"><span class="hs-identifier hs-type">CmmExpr</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Cmm.Graph.html#CmmAGraph"><span class="hs-identifier hs-type">CmmAGraph</span></a></span><span>
</span><span id="line-274"></span><span id="mkUnwind"><span class="annot"><span class="annottext">mkUnwind :: GlobalReg -&gt; CmmExpr -&gt; CmmAGraph
</span><a href="GHC.Cmm.Graph.html#mkUnwind"><span class="hs-identifier hs-var hs-var">mkUnwind</span></a></span></span><span> </span><span id="local-6989586621681049590"><span class="annot"><span class="annottext">GlobalReg
</span><a href="#local-6989586621681049590"><span class="hs-identifier hs-var">r</span></a></span></span><span> </span><span id="local-6989586621681049589"><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681049589"><span class="hs-identifier hs-var">e</span></a></span></span><span>  </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">CmmNode O O -&gt; CmmAGraph
</span><a href="GHC.Cmm.Graph.html#mkMiddle"><span class="hs-identifier hs-var">mkMiddle</span></a></span><span> </span><span class="annot"><span class="annottext">(CmmNode O O -&gt; CmmAGraph) -&gt; CmmNode O O -&gt; CmmAGraph
forall a b. (a -&gt; b) -&gt; a -&gt; b
</span><a href="../../base/src/GHC.Base.html#%24"><span class="hs-operator hs-var">$</span></a></span><span> </span><span class="annot"><span class="annottext">[(GlobalReg, Maybe CmmExpr)] -&gt; CmmNode O O
</span><a href="GHC.Cmm.Node.html#CmmUnwind"><span class="hs-identifier hs-var">CmmUnwind</span></a></span><span> </span><span class="hs-special">[</span><span class="hs-special">(</span><span class="annot"><span class="annottext">GlobalReg
</span><a href="#local-6989586621681049590"><span class="hs-identifier hs-var">r</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><span class="annottext">CmmExpr -&gt; Maybe CmmExpr
forall a. a -&gt; Maybe a
</span><a href="../../base/src/GHC.Maybe.html#Just"><span class="hs-identifier hs-var">Just</span></a></span><span> </span><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681049589"><span class="hs-identifier hs-var">e</span></a></span><span class="hs-special">)</span><span class="hs-special">]</span><span>
</span><span id="line-275"></span><span>
</span><span id="line-276"></span><span class="hs-comment">--------------------------------------------------------------------------</span><span>
</span><span id="line-277"></span><span>
</span><span id="line-278"></span><span>
</span><span id="line-279"></span><span>
</span><span id="line-280"></span><span>
</span><span id="line-281"></span><span class="hs-comment">-- Why are we inserting extra blocks that simply branch to the successors?</span><span>
</span><span id="line-282"></span><span class="hs-comment">-- Because in addition to the branch instruction, @mkBranch@ will insert</span><span>
</span><span id="line-283"></span><span class="hs-comment">-- a necessary adjustment to the stack pointer.</span><span>
</span><span id="line-284"></span><span>
</span><span id="line-285"></span><span>
</span><span id="line-286"></span><span class="hs-comment">-- For debugging purposes, we can stub out dead stack slots:</span><span>
</span><span id="line-287"></span><span class="annot"><a href="GHC.Cmm.Graph.html#stackStubExpr"><span class="hs-identifier hs-type">stackStubExpr</span></a></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="GHC.Cmm.Type.html#Width"><span class="hs-identifier hs-type">Width</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Cmm.Expr.html#CmmExpr"><span class="hs-identifier hs-type">CmmExpr</span></a></span><span>
</span><span id="line-288"></span><span id="stackStubExpr"><span class="annot"><span class="annottext">stackStubExpr :: Width -&gt; CmmExpr
</span><a href="GHC.Cmm.Graph.html#stackStubExpr"><span class="hs-identifier hs-var hs-var">stackStubExpr</span></a></span></span><span> </span><span id="local-6989586621681049587"><span class="annot"><span class="annottext">Width
</span><a href="#local-6989586621681049587"><span class="hs-identifier hs-var">w</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">CmmLit -&gt; CmmExpr
</span><a href="GHC.Cmm.Expr.html#CmmLit"><span class="hs-identifier hs-var">CmmLit</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Integer -&gt; Width -&gt; CmmLit
</span><a href="GHC.Cmm.Expr.html#CmmInt"><span class="hs-identifier hs-var">CmmInt</span></a></span><span> </span><span class="annot"><span class="annottext">Integer
</span><span class="hs-number">0</span></span><span> </span><span class="annot"><span class="annottext">Width
</span><a href="#local-6989586621681049587"><span class="hs-identifier hs-var">w</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-289"></span><span>
</span><span id="line-290"></span><span class="hs-comment">-- When we copy in parameters, we usually want to put overflow</span><span>
</span><span id="line-291"></span><span class="hs-comment">-- parameters on the stack, but sometimes we want to pass the</span><span>
</span><span id="line-292"></span><span class="hs-comment">-- variables in their spill slots.  Therefore, for copying arguments</span><span>
</span><span id="line-293"></span><span class="hs-comment">-- and results, we provide different functions to pass the arguments</span><span>
</span><span id="line-294"></span><span class="hs-comment">-- in an overflow area and to pass them in spill slots.</span><span>
</span><span id="line-295"></span><span class="annot"><a href="GHC.Cmm.Graph.html#copyInOflow"><span class="hs-identifier hs-type">copyInOflow</span></a></span><span>  </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="GHC.Driver.Session.html#DynFlags"><span class="hs-identifier hs-type">DynFlags</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Cmm.Node.html#Convention"><span class="hs-identifier hs-type">Convention</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Cmm.Expr.html#Area"><span class="hs-identifier hs-type">Area</span></a></span><span>
</span><span id="line-296"></span><span>             </span><span class="hs-glyph">-&gt;</span><span> </span><span class="hs-special">[</span><span class="annot"><a href="GHC.Cmm.Node.html#CmmFormal"><span class="hs-identifier hs-type">CmmFormal</span></a></span><span class="hs-special">]</span><span>
</span><span id="line-297"></span><span>             </span><span class="hs-glyph">-&gt;</span><span> </span><span class="hs-special">[</span><span class="annot"><a href="GHC.Cmm.Node.html#CmmFormal"><span class="hs-identifier hs-type">CmmFormal</span></a></span><span class="hs-special">]</span><span>
</span><span id="line-298"></span><span>             </span><span class="hs-glyph">-&gt;</span><span> </span><span class="hs-special">(</span><span class="annot"><span class="hs-identifier hs-type">Int</span></span><span class="hs-special">,</span><span> </span><span class="hs-special">[</span><span class="annot"><a href="GHC.Cmm.Expr.html#GlobalReg"><span class="hs-identifier hs-type">GlobalReg</span></a></span><span class="hs-special">]</span><span class="hs-special">,</span><span> </span><span class="annot"><a href="GHC.Cmm.Graph.html#CmmAGraph"><span class="hs-identifier hs-type">CmmAGraph</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-299"></span><span>
</span><span id="line-300"></span><span id="copyInOflow"><span class="annot"><span class="annottext">copyInOflow :: DynFlags
-&gt; Convention
-&gt; Area
-&gt; [CmmFormal]
-&gt; [CmmFormal]
-&gt; (ByteOff, [GlobalReg], CmmAGraph)
</span><a href="GHC.Cmm.Graph.html#copyInOflow"><span class="hs-identifier hs-var hs-var">copyInOflow</span></a></span></span><span> </span><span id="local-6989586621681049584"><span class="annot"><span class="annottext">DynFlags
</span><a href="#local-6989586621681049584"><span class="hs-identifier hs-var">dflags</span></a></span></span><span> </span><span id="local-6989586621681049583"><span class="annot"><span class="annottext">Convention
</span><a href="#local-6989586621681049583"><span class="hs-identifier hs-var">conv</span></a></span></span><span> </span><span id="local-6989586621681049582"><span class="annot"><span class="annottext">Area
</span><a href="#local-6989586621681049582"><span class="hs-identifier hs-var">area</span></a></span></span><span> </span><span id="local-6989586621681049581"><span class="annot"><span class="annottext">[CmmFormal]
</span><a href="#local-6989586621681049581"><span class="hs-identifier hs-var">formals</span></a></span></span><span> </span><span id="local-6989586621681049580"><span class="annot"><span class="annottext">[CmmFormal]
</span><a href="#local-6989586621681049580"><span class="hs-identifier hs-var">extra_stk</span></a></span></span><span>
</span><span id="line-301"></span><span>  </span><span class="hs-glyph">=</span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">ByteOff
</span><a href="#local-6989586621681049579"><span class="hs-identifier hs-var">offset</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><span class="annottext">[GlobalReg]
</span><a href="#local-6989586621681049578"><span class="hs-identifier hs-var">gregs</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><span class="annottext">[CmmAGraph] -&gt; CmmAGraph
</span><a href="GHC.Cmm.Graph.html#catAGraphs"><span class="hs-identifier hs-var">catAGraphs</span></a></span><span> </span><span class="annot"><span class="annottext">([CmmAGraph] -&gt; CmmAGraph) -&gt; [CmmAGraph] -&gt; CmmAGraph
forall a b. (a -&gt; b) -&gt; a -&gt; b
</span><a href="../../base/src/GHC.Base.html#%24"><span class="hs-operator hs-var">$</span></a></span><span> </span><span class="annot"><span class="annottext">(CmmNode O O -&gt; CmmAGraph) -&gt; [CmmNode O O] -&gt; [CmmAGraph]
forall a b. (a -&gt; b) -&gt; [a] -&gt; [b]
</span><a href="../../base/src/GHC.Base.html#map"><span class="hs-identifier hs-var">map</span></a></span><span> </span><span class="annot"><span class="annottext">CmmNode O O -&gt; CmmAGraph
</span><a href="GHC.Cmm.Graph.html#mkMiddle"><span class="hs-identifier hs-var">mkMiddle</span></a></span><span> </span><span class="annot"><span class="annottext">[CmmNode O O]
</span><a href="#local-6989586621681049577"><span class="hs-identifier hs-var">nodes</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-302"></span><span>  </span><span class="hs-keyword">where</span><span> </span><span class="hs-special">(</span><span id="local-6989586621681049579"><span class="annot"><span class="annottext">ByteOff
</span><a href="#local-6989586621681049579"><span class="hs-identifier hs-var">offset</span></a></span></span><span class="hs-special">,</span><span> </span><span id="local-6989586621681049578"><span class="annot"><span class="annottext">[GlobalReg]
</span><a href="#local-6989586621681049578"><span class="hs-identifier hs-var">gregs</span></a></span></span><span class="hs-special">,</span><span> </span><span id="local-6989586621681049577"><span class="annot"><span class="annottext">[CmmNode O O]
</span><a href="#local-6989586621681049577"><span class="hs-identifier hs-var">nodes</span></a></span></span><span class="hs-special">)</span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">DynFlags
-&gt; Convention
-&gt; Area
-&gt; [CmmFormal]
-&gt; [CmmFormal]
-&gt; (ByteOff, [GlobalReg], [CmmNode O O])
</span><a href="GHC.Cmm.Graph.html#copyIn"><span class="hs-identifier hs-var">copyIn</span></a></span><span> </span><span class="annot"><span class="annottext">DynFlags
</span><a href="#local-6989586621681049584"><span class="hs-identifier hs-var">dflags</span></a></span><span> </span><span class="annot"><span class="annottext">Convention
</span><a href="#local-6989586621681049583"><span class="hs-identifier hs-var">conv</span></a></span><span> </span><span class="annot"><span class="annottext">Area
</span><a href="#local-6989586621681049582"><span class="hs-identifier hs-var">area</span></a></span><span> </span><span class="annot"><span class="annottext">[CmmFormal]
</span><a href="#local-6989586621681049581"><span class="hs-identifier hs-var">formals</span></a></span><span> </span><span class="annot"><span class="annottext">[CmmFormal]
</span><a href="#local-6989586621681049580"><span class="hs-identifier hs-var">extra_stk</span></a></span><span>
</span><span id="line-303"></span><span>
</span><span id="line-304"></span><span class="hs-comment">-- Return the number of bytes used for copying arguments, as well as the</span><span>
</span><span id="line-305"></span><span class="hs-comment">-- instructions to copy the arguments.</span><span>
</span><span id="line-306"></span><span class="annot"><a href="GHC.Cmm.Graph.html#copyIn"><span class="hs-identifier hs-type">copyIn</span></a></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="GHC.Driver.Session.html#DynFlags"><span class="hs-identifier hs-type">DynFlags</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Cmm.Node.html#Convention"><span class="hs-identifier hs-type">Convention</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Cmm.Expr.html#Area"><span class="hs-identifier hs-type">Area</span></a></span><span>
</span><span id="line-307"></span><span>       </span><span class="hs-glyph">-&gt;</span><span> </span><span class="hs-special">[</span><span class="annot"><a href="GHC.Cmm.Node.html#CmmFormal"><span class="hs-identifier hs-type">CmmFormal</span></a></span><span class="hs-special">]</span><span>
</span><span id="line-308"></span><span>       </span><span class="hs-glyph">-&gt;</span><span> </span><span class="hs-special">[</span><span class="annot"><a href="GHC.Cmm.Node.html#CmmFormal"><span class="hs-identifier hs-type">CmmFormal</span></a></span><span class="hs-special">]</span><span>
</span><span id="line-309"></span><span>       </span><span class="hs-glyph">-&gt;</span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.Runtime.Heap.Layout.html#ByteOff"><span class="hs-identifier hs-type">ByteOff</span></a></span><span class="hs-special">,</span><span> </span><span class="hs-special">[</span><span class="annot"><a href="GHC.Cmm.Expr.html#GlobalReg"><span class="hs-identifier hs-type">GlobalReg</span></a></span><span class="hs-special">]</span><span class="hs-special">,</span><span> </span><span class="hs-special">[</span><span class="annot"><a href="GHC.Cmm.Node.html#CmmNode"><span class="hs-identifier hs-type">CmmNode</span></a></span><span> </span><span class="annot"><a href="GHC.Cmm.Dataflow.Block.html#O"><span class="hs-identifier hs-type">O</span></a></span><span> </span><span class="annot"><a href="GHC.Cmm.Dataflow.Block.html#O"><span class="hs-identifier hs-type">O</span></a></span><span class="hs-special">]</span><span class="hs-special">)</span><span>
</span><span id="line-310"></span><span id="copyIn"><span class="annot"><span class="annottext">copyIn :: DynFlags
-&gt; Convention
-&gt; Area
-&gt; [CmmFormal]
-&gt; [CmmFormal]
-&gt; (ByteOff, [GlobalReg], [CmmNode O O])
</span><a href="GHC.Cmm.Graph.html#copyIn"><span class="hs-identifier hs-var hs-var">copyIn</span></a></span></span><span> </span><span id="local-6989586621681049575"><span class="annot"><span class="annottext">DynFlags
</span><a href="#local-6989586621681049575"><span class="hs-identifier hs-var">dflags</span></a></span></span><span> </span><span id="local-6989586621681049574"><span class="annot"><span class="annottext">Convention
</span><a href="#local-6989586621681049574"><span class="hs-identifier hs-var">conv</span></a></span></span><span> </span><span id="local-6989586621681049573"><span class="annot"><span class="annottext">Area
</span><a href="#local-6989586621681049573"><span class="hs-identifier hs-var">area</span></a></span></span><span> </span><span id="local-6989586621681049572"><span class="annot"><span class="annottext">[CmmFormal]
</span><a href="#local-6989586621681049572"><span class="hs-identifier hs-var">formals</span></a></span></span><span> </span><span id="local-6989586621681049571"><span class="annot"><span class="annottext">[CmmFormal]
</span><a href="#local-6989586621681049571"><span class="hs-identifier hs-var">extra_stk</span></a></span></span><span>
</span><span id="line-311"></span><span>  </span><span class="hs-glyph">=</span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">ByteOff
</span><a href="#local-6989586621681049570"><span class="hs-identifier hs-var">stk_size</span></a></span><span class="hs-special">,</span><span> </span><span class="hs-special">[</span><span class="annot"><span class="annottext">GlobalReg
</span><a href="#local-6989586621681049569"><span class="hs-identifier hs-var">r</span></a></span><span> </span><span class="hs-glyph">|</span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">CmmFormal
</span><span class="hs-identifier">_</span></span><span class="hs-special">,</span><span> </span><span class="annot"><a href="GHC.Cmm.CallConv.html#RegisterParam"><span class="hs-identifier hs-type">RegisterParam</span></a></span><span> </span><span id="local-6989586621681049569"><span class="annot"><span class="annottext">GlobalReg
</span><a href="#local-6989586621681049569"><span class="hs-identifier hs-var">r</span></a></span></span><span class="hs-special">)</span><span> </span><span class="hs-glyph">&lt;-</span><span> </span><span class="annot"><span class="annottext">[(CmmFormal, ParamLocation)]
</span><a href="#local-6989586621681049567"><span class="hs-identifier hs-var">args</span></a></span><span class="hs-special">]</span><span class="hs-special">,</span><span> </span><span class="annot"><span class="annottext">((CmmFormal, ParamLocation) -&gt; CmmNode O O)
-&gt; [(CmmFormal, ParamLocation)] -&gt; [CmmNode O O]
forall a b. (a -&gt; b) -&gt; [a] -&gt; [b]
</span><a href="../../base/src/GHC.Base.html#map"><span class="hs-identifier hs-var">map</span></a></span><span> </span><span class="annot"><span class="annottext">(CmmFormal, ParamLocation) -&gt; CmmNode O O
</span><a href="#local-6989586621681049566"><span class="hs-identifier hs-var">ci</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">[(CmmFormal, ParamLocation)]
</span><a href="#local-6989586621681049565"><span class="hs-identifier hs-var">stk_args</span></a></span><span> </span><span class="annot"><span class="annottext">[(CmmFormal, ParamLocation)]
-&gt; [(CmmFormal, ParamLocation)] -&gt; [(CmmFormal, ParamLocation)]
forall a. [a] -&gt; [a] -&gt; [a]
</span><a href="../../base/src/GHC.Base.html#%2B%2B"><span class="hs-operator hs-var">++</span></a></span><span> </span><span class="annot"><span class="annottext">[(CmmFormal, ParamLocation)]
</span><a href="#local-6989586621681049567"><span class="hs-identifier hs-var">args</span></a></span><span class="hs-special">)</span><span class="hs-special">)</span><span>
</span><span id="line-312"></span><span>  </span><span class="hs-keyword">where</span><span>
</span><span id="line-313"></span><span>    </span><span id="local-6989586621681049564"><span class="annot"><span class="annottext">platform :: Platform
</span><a href="#local-6989586621681049564"><span class="hs-identifier hs-var hs-var">platform</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">DynFlags -&gt; Platform
</span><a href="GHC.Driver.Session.html#targetPlatform"><span class="hs-identifier hs-var hs-var">targetPlatform</span></a></span><span> </span><span class="annot"><span class="annottext">DynFlags
</span><a href="#local-6989586621681049575"><span class="hs-identifier hs-var">dflags</span></a></span><span>
</span><span id="line-314"></span><span>    </span><span class="hs-comment">-- See Note [Width of parameters]</span><span>
</span><span id="line-315"></span><span>    </span><span id="local-6989586621681049566"><span class="annot"><span class="annottext">ci :: (CmmFormal, ParamLocation) -&gt; CmmNode O O
</span><a href="#local-6989586621681049566"><span class="hs-identifier hs-var hs-var">ci</span></a></span></span><span> </span><span class="hs-special">(</span><span id="local-6989586621681049562"><span class="annot"><span class="annottext">CmmFormal
</span><a href="#local-6989586621681049562"><span class="hs-identifier hs-var">reg</span></a></span></span><span class="hs-special">,</span><span> </span><span class="annot"><a href="GHC.Cmm.CallConv.html#RegisterParam"><span class="hs-identifier hs-type">RegisterParam</span></a></span><span> </span><span id="local-6989586621681049561"><span class="annot"><span class="annottext">r :: GlobalReg
</span><a href="#local-6989586621681049561"><span class="hs-identifier hs-var">r</span></a></span></span><span class="hs-glyph">@</span><span class="hs-special">(</span><span class="annot"><a href="GHC.Cmm.Expr.html#VanillaReg"><span class="hs-identifier hs-type">VanillaReg</span></a></span><span> </span><span class="hs-special">{</span><span class="hs-special">}</span><span class="hs-special">)</span><span class="hs-special">)</span><span> </span><span class="hs-glyph">=</span><span>
</span><span id="line-316"></span><span>        </span><span class="hs-keyword">let</span><span> </span><span id="local-6989586621681049559"><span class="annot"><span class="annottext">local :: CmmReg
</span><a href="#local-6989586621681049559"><span class="hs-identifier hs-var hs-var">local</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">CmmFormal -&gt; CmmReg
</span><a href="GHC.Cmm.Expr.html#CmmLocal"><span class="hs-identifier hs-var">CmmLocal</span></a></span><span> </span><span class="annot"><span class="annottext">CmmFormal
</span><a href="#local-6989586621681049562"><span class="hs-identifier hs-var">reg</span></a></span><span>
</span><span id="line-317"></span><span>            </span><span id="local-6989586621681049557"><span class="annot"><span class="annottext">global :: CmmExpr
</span><a href="#local-6989586621681049557"><span class="hs-identifier hs-var hs-var">global</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">CmmReg -&gt; CmmExpr
</span><a href="GHC.Cmm.Expr.html#CmmReg"><span class="hs-identifier hs-var">CmmReg</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">GlobalReg -&gt; CmmReg
</span><a href="GHC.Cmm.Expr.html#CmmGlobal"><span class="hs-identifier hs-var">CmmGlobal</span></a></span><span> </span><span class="annot"><span class="annottext">GlobalReg
</span><a href="#local-6989586621681049561"><span class="hs-identifier hs-var">r</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-318"></span><span>            </span><span id="local-6989586621681049555"><span class="annot"><span class="annottext">width :: Width
</span><a href="#local-6989586621681049555"><span class="hs-identifier hs-var hs-var">width</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Platform -&gt; CmmReg -&gt; Width
</span><a href="GHC.Cmm.Expr.html#cmmRegWidth"><span class="hs-identifier hs-var">cmmRegWidth</span></a></span><span> </span><span class="annot"><span class="annottext">Platform
</span><a href="#local-6989586621681049564"><span class="hs-identifier hs-var">platform</span></a></span><span> </span><span class="annot"><span class="annottext">CmmReg
</span><a href="#local-6989586621681049559"><span class="hs-identifier hs-var">local</span></a></span><span>
</span><span id="line-319"></span><span>            </span><span id="local-6989586621681049553"><span class="annot"><span class="annottext">expr :: CmmExpr
</span><a href="#local-6989586621681049553"><span class="hs-identifier hs-var hs-var">expr</span></a></span></span><span>
</span><span id="line-320"></span><span>                </span><span class="hs-glyph">|</span><span> </span><span class="annot"><span class="annottext">Width
</span><a href="#local-6989586621681049555"><span class="hs-identifier hs-var">width</span></a></span><span> </span><span class="annot"><span class="annottext">Width -&gt; Width -&gt; Bool
forall a. Eq a =&gt; a -&gt; a -&gt; Bool
</span><span class="hs-operator hs-var">==</span></span><span> </span><span class="annot"><span class="annottext">Platform -&gt; Width
</span><a href="GHC.Cmm.Type.html#wordWidth"><span class="hs-identifier hs-var">wordWidth</span></a></span><span> </span><span class="annot"><span class="annottext">Platform
</span><a href="#local-6989586621681049564"><span class="hs-identifier hs-var">platform</span></a></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681049557"><span class="hs-identifier hs-var">global</span></a></span><span>
</span><span id="line-321"></span><span>                </span><span class="hs-glyph">|</span><span> </span><span class="annot"><span class="annottext">Width
</span><a href="#local-6989586621681049555"><span class="hs-identifier hs-var">width</span></a></span><span> </span><span class="annot"><span class="annottext">Width -&gt; Width -&gt; Bool
forall a. Ord a =&gt; a -&gt; a -&gt; Bool
</span><span class="hs-operator hs-var">&lt;</span></span><span> </span><span class="annot"><span class="annottext">Platform -&gt; Width
</span><a href="GHC.Cmm.Type.html#wordWidth"><span class="hs-identifier hs-var">wordWidth</span></a></span><span> </span><span class="annot"><span class="annottext">Platform
</span><a href="#local-6989586621681049564"><span class="hs-identifier hs-var">platform</span></a></span><span> </span><span class="hs-glyph">=</span><span>
</span><span id="line-322"></span><span>                    </span><span class="annot"><span class="annottext">MachOp -&gt; [CmmExpr] -&gt; CmmExpr
</span><a href="GHC.Cmm.Expr.html#CmmMachOp"><span class="hs-identifier hs-var">CmmMachOp</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Width -&gt; Width -&gt; MachOp
</span><a href="GHC.Cmm.MachOp.html#MO_XX_Conv"><span class="hs-identifier hs-var">MO_XX_Conv</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Platform -&gt; Width
</span><a href="GHC.Cmm.Type.html#wordWidth"><span class="hs-identifier hs-var">wordWidth</span></a></span><span> </span><span class="annot"><span class="annottext">Platform
</span><a href="#local-6989586621681049564"><span class="hs-identifier hs-var">platform</span></a></span><span class="hs-special">)</span><span> </span><span class="annot"><span class="annottext">Width
</span><a href="#local-6989586621681049555"><span class="hs-identifier hs-var">width</span></a></span><span class="hs-special">)</span><span> </span><span class="hs-special">[</span><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681049557"><span class="hs-identifier hs-var">global</span></a></span><span class="hs-special">]</span><span>
</span><span id="line-323"></span><span>                </span><span class="hs-glyph">|</span><span> </span><span class="annot"><span class="annottext">Bool
</span><a href="../../base/src/GHC.Base.html#otherwise"><span class="hs-identifier hs-var">otherwise</span></a></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">String -&gt; CmmExpr
forall a. String -&gt; a
</span><a href="GHC.Utils.Panic.Plain.html#panic"><span class="hs-identifier hs-var">panic</span></a></span><span> </span><span class="annot"><span class="annottext">String
</span><span class="hs-string">&quot;Parameter width greater than word width&quot;</span></span><span>
</span><span id="line-324"></span><span>
</span><span id="line-325"></span><span>        </span><span class="hs-keyword">in</span><span> </span><span class="annot"><span class="annottext">CmmReg -&gt; CmmExpr -&gt; CmmNode O O
</span><a href="GHC.Cmm.Node.html#CmmAssign"><span class="hs-identifier hs-var">CmmAssign</span></a></span><span> </span><span class="annot"><span class="annottext">CmmReg
</span><a href="#local-6989586621681049559"><span class="hs-identifier hs-var">local</span></a></span><span> </span><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681049553"><span class="hs-identifier hs-var">expr</span></a></span><span>
</span><span id="line-326"></span><span>
</span><span id="line-327"></span><span>    </span><span class="hs-comment">-- Non VanillaRegs</span><span>
</span><span id="line-328"></span><span>    </span><span class="annot"><a href="#local-6989586621681049566"><span class="hs-identifier hs-var">ci</span></a></span><span> </span><span class="hs-special">(</span><span id="local-6989586621681049547"><span class="annot"><span class="annottext">CmmFormal
</span><a href="#local-6989586621681049547"><span class="hs-identifier hs-var">reg</span></a></span></span><span class="hs-special">,</span><span> </span><span class="annot"><a href="GHC.Cmm.CallConv.html#RegisterParam"><span class="hs-identifier hs-type">RegisterParam</span></a></span><span> </span><span id="local-6989586621681049546"><span class="annot"><span class="annottext">GlobalReg
</span><a href="#local-6989586621681049546"><span class="hs-identifier hs-var">r</span></a></span></span><span class="hs-special">)</span><span> </span><span class="hs-glyph">=</span><span>
</span><span id="line-329"></span><span>        </span><span class="annot"><span class="annottext">CmmReg -&gt; CmmExpr -&gt; CmmNode O O
</span><a href="GHC.Cmm.Node.html#CmmAssign"><span class="hs-identifier hs-var">CmmAssign</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">CmmFormal -&gt; CmmReg
</span><a href="GHC.Cmm.Expr.html#CmmLocal"><span class="hs-identifier hs-var">CmmLocal</span></a></span><span> </span><span class="annot"><span class="annottext">CmmFormal
</span><a href="#local-6989586621681049547"><span class="hs-identifier hs-var">reg</span></a></span><span class="hs-special">)</span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">CmmReg -&gt; CmmExpr
</span><a href="GHC.Cmm.Expr.html#CmmReg"><span class="hs-identifier hs-var">CmmReg</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">GlobalReg -&gt; CmmReg
</span><a href="GHC.Cmm.Expr.html#CmmGlobal"><span class="hs-identifier hs-var">CmmGlobal</span></a></span><span> </span><span class="annot"><span class="annottext">GlobalReg
</span><a href="#local-6989586621681049546"><span class="hs-identifier hs-var">r</span></a></span><span class="hs-special">)</span><span class="hs-special">)</span><span>
</span><span id="line-330"></span><span>
</span><span id="line-331"></span><span>    </span><span class="annot"><a href="#local-6989586621681049566"><span class="hs-identifier hs-var">ci</span></a></span><span> </span><span class="hs-special">(</span><span id="local-6989586621681049545"><span class="annot"><span class="annottext">CmmFormal
</span><a href="#local-6989586621681049545"><span class="hs-identifier hs-var">reg</span></a></span></span><span class="hs-special">,</span><span> </span><span class="annot"><a href="GHC.Cmm.CallConv.html#StackParam"><span class="hs-identifier hs-type">StackParam</span></a></span><span> </span><span id="local-6989586621681049543"><span class="annot"><span class="annottext">ByteOff
</span><a href="#local-6989586621681049543"><span class="hs-identifier hs-var">off</span></a></span></span><span class="hs-special">)</span><span>
</span><span id="line-332"></span><span>      </span><span class="hs-glyph">|</span><span> </span><span class="annot"><span class="annottext">CmmType -&gt; Bool
</span><a href="GHC.Cmm.Type.html#isBitsType"><span class="hs-identifier hs-var">isBitsType</span></a></span><span> </span><span class="annot"><span class="annottext">(CmmType -&gt; Bool) -&gt; CmmType -&gt; Bool
forall a b. (a -&gt; b) -&gt; a -&gt; b
</span><a href="../../base/src/GHC.Base.html#%24"><span class="hs-operator hs-var">$</span></a></span><span> </span><span class="annot"><span class="annottext">CmmFormal -&gt; CmmType
</span><a href="GHC.Cmm.Expr.html#localRegType"><span class="hs-identifier hs-var">localRegType</span></a></span><span> </span><span class="annot"><span class="annottext">CmmFormal
</span><a href="#local-6989586621681049545"><span class="hs-identifier hs-var">reg</span></a></span><span>
</span><span id="line-333"></span><span>      </span><span class="hs-special">,</span><span> </span><span class="annot"><span class="annottext">CmmType -&gt; Width
</span><a href="GHC.Cmm.Type.html#typeWidth"><span class="hs-identifier hs-var">typeWidth</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">CmmFormal -&gt; CmmType
</span><a href="GHC.Cmm.Expr.html#localRegType"><span class="hs-identifier hs-var">localRegType</span></a></span><span> </span><span class="annot"><span class="annottext">CmmFormal
</span><a href="#local-6989586621681049545"><span class="hs-identifier hs-var">reg</span></a></span><span class="hs-special">)</span><span> </span><span class="annot"><span class="annottext">Width -&gt; Width -&gt; Bool
forall a. Ord a =&gt; a -&gt; a -&gt; Bool
</span><span class="hs-operator hs-var">&lt;</span></span><span> </span><span class="annot"><span class="annottext">Platform -&gt; Width
</span><a href="GHC.Cmm.Type.html#wordWidth"><span class="hs-identifier hs-var">wordWidth</span></a></span><span> </span><span class="annot"><span class="annottext">Platform
</span><a href="#local-6989586621681049564"><span class="hs-identifier hs-var">platform</span></a></span><span> </span><span class="hs-glyph">=</span><span>
</span><span id="line-334"></span><span>        </span><span class="hs-keyword">let</span><span>
</span><span id="line-335"></span><span>          </span><span id="local-6989586621681049539"><span class="annot"><span class="annottext">stack_slot :: CmmExpr
</span><a href="#local-6989586621681049539"><span class="hs-identifier hs-var hs-var">stack_slot</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">CmmExpr -&gt; CmmType -&gt; CmmExpr
</span><a href="GHC.Cmm.Expr.html#CmmLoad"><span class="hs-identifier hs-var">CmmLoad</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Area -&gt; ByteOff -&gt; CmmExpr
</span><a href="GHC.Cmm.Expr.html#CmmStackSlot"><span class="hs-identifier hs-var">CmmStackSlot</span></a></span><span> </span><span class="annot"><span class="annottext">Area
</span><a href="#local-6989586621681049573"><span class="hs-identifier hs-var">area</span></a></span><span> </span><span class="annot"><span class="annottext">ByteOff
</span><a href="#local-6989586621681049543"><span class="hs-identifier hs-var">off</span></a></span><span class="hs-special">)</span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Width -&gt; CmmType
</span><a href="GHC.Cmm.Type.html#cmmBits"><span class="hs-identifier hs-var">cmmBits</span></a></span><span> </span><span class="annot"><span class="annottext">(Width -&gt; CmmType) -&gt; Width -&gt; CmmType
forall a b. (a -&gt; b) -&gt; a -&gt; b
</span><a href="../../base/src/GHC.Base.html#%24"><span class="hs-operator hs-var">$</span></a></span><span> </span><span class="annot"><span class="annottext">Platform -&gt; Width
</span><a href="GHC.Cmm.Type.html#wordWidth"><span class="hs-identifier hs-var">wordWidth</span></a></span><span> </span><span class="annot"><span class="annottext">Platform
</span><a href="#local-6989586621681049564"><span class="hs-identifier hs-var">platform</span></a></span><span class="hs-special">)</span><span class="hs-special">)</span><span>
</span><span id="line-336"></span><span>          </span><span id="local-6989586621681049535"><span class="annot"><span class="annottext">local :: CmmReg
</span><a href="#local-6989586621681049535"><span class="hs-identifier hs-var hs-var">local</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">CmmFormal -&gt; CmmReg
</span><a href="GHC.Cmm.Expr.html#CmmLocal"><span class="hs-identifier hs-var">CmmLocal</span></a></span><span> </span><span class="annot"><span class="annottext">CmmFormal
</span><a href="#local-6989586621681049545"><span class="hs-identifier hs-var">reg</span></a></span><span>
</span><span id="line-337"></span><span>          </span><span id="local-6989586621681049534"><span class="annot"><span class="annottext">width :: Width
</span><a href="#local-6989586621681049534"><span class="hs-identifier hs-var hs-var">width</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Platform -&gt; CmmReg -&gt; Width
</span><a href="GHC.Cmm.Expr.html#cmmRegWidth"><span class="hs-identifier hs-var">cmmRegWidth</span></a></span><span> </span><span class="annot"><span class="annottext">Platform
</span><a href="#local-6989586621681049564"><span class="hs-identifier hs-var">platform</span></a></span><span> </span><span class="annot"><span class="annottext">CmmReg
</span><a href="#local-6989586621681049535"><span class="hs-identifier hs-var">local</span></a></span><span>
</span><span id="line-338"></span><span>          </span><span id="local-6989586621681049533"><span class="annot"><span class="annottext">expr :: CmmExpr
</span><a href="#local-6989586621681049533"><span class="hs-identifier hs-var hs-var">expr</span></a></span></span><span>  </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">MachOp -&gt; [CmmExpr] -&gt; CmmExpr
</span><a href="GHC.Cmm.Expr.html#CmmMachOp"><span class="hs-identifier hs-var">CmmMachOp</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Width -&gt; Width -&gt; MachOp
</span><a href="GHC.Cmm.MachOp.html#MO_XX_Conv"><span class="hs-identifier hs-var">MO_XX_Conv</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Platform -&gt; Width
</span><a href="GHC.Cmm.Type.html#wordWidth"><span class="hs-identifier hs-var">wordWidth</span></a></span><span> </span><span class="annot"><span class="annottext">Platform
</span><a href="#local-6989586621681049564"><span class="hs-identifier hs-var">platform</span></a></span><span class="hs-special">)</span><span> </span><span class="annot"><span class="annottext">Width
</span><a href="#local-6989586621681049534"><span class="hs-identifier hs-var">width</span></a></span><span class="hs-special">)</span><span> </span><span class="hs-special">[</span><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681049539"><span class="hs-identifier hs-var">stack_slot</span></a></span><span class="hs-special">]</span><span>
</span><span id="line-339"></span><span>        </span><span class="hs-keyword">in</span><span> </span><span class="annot"><span class="annottext">CmmReg -&gt; CmmExpr -&gt; CmmNode O O
</span><a href="GHC.Cmm.Node.html#CmmAssign"><span class="hs-identifier hs-var">CmmAssign</span></a></span><span> </span><span class="annot"><span class="annottext">CmmReg
</span><a href="#local-6989586621681049535"><span class="hs-identifier hs-var">local</span></a></span><span> </span><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681049533"><span class="hs-identifier hs-var">expr</span></a></span><span>
</span><span id="line-340"></span><span>
</span><span id="line-341"></span><span>      </span><span class="hs-glyph">|</span><span> </span><span class="annot"><span class="annottext">Bool
</span><a href="../../base/src/GHC.Base.html#otherwise"><span class="hs-identifier hs-var">otherwise</span></a></span><span> </span><span class="hs-glyph">=</span><span>
</span><span id="line-342"></span><span>         </span><span class="annot"><span class="annottext">CmmReg -&gt; CmmExpr -&gt; CmmNode O O
</span><a href="GHC.Cmm.Node.html#CmmAssign"><span class="hs-identifier hs-var">CmmAssign</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">CmmFormal -&gt; CmmReg
</span><a href="GHC.Cmm.Expr.html#CmmLocal"><span class="hs-identifier hs-var">CmmLocal</span></a></span><span> </span><span class="annot"><span class="annottext">CmmFormal
</span><a href="#local-6989586621681049545"><span class="hs-identifier hs-var">reg</span></a></span><span class="hs-special">)</span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">CmmExpr -&gt; CmmType -&gt; CmmExpr
</span><a href="GHC.Cmm.Expr.html#CmmLoad"><span class="hs-identifier hs-var">CmmLoad</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Area -&gt; ByteOff -&gt; CmmExpr
</span><a href="GHC.Cmm.Expr.html#CmmStackSlot"><span class="hs-identifier hs-var">CmmStackSlot</span></a></span><span> </span><span class="annot"><span class="annottext">Area
</span><a href="#local-6989586621681049573"><span class="hs-identifier hs-var">area</span></a></span><span> </span><span class="annot"><span class="annottext">ByteOff
</span><a href="#local-6989586621681049543"><span class="hs-identifier hs-var">off</span></a></span><span class="hs-special">)</span><span> </span><span class="annot"><span class="annottext">CmmType
</span><a href="#local-6989586621681049532"><span class="hs-identifier hs-var">ty</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-343"></span><span>         </span><span class="hs-keyword">where</span><span> </span><span id="local-6989586621681049532"><span class="annot"><span class="annottext">ty :: CmmType
</span><a href="#local-6989586621681049532"><span class="hs-identifier hs-var hs-var">ty</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">CmmFormal -&gt; CmmType
</span><a href="GHC.Cmm.Expr.html#localRegType"><span class="hs-identifier hs-var">localRegType</span></a></span><span> </span><span class="annot"><span class="annottext">CmmFormal
</span><a href="#local-6989586621681049545"><span class="hs-identifier hs-var">reg</span></a></span><span>
</span><span id="line-344"></span><span>
</span><span id="line-345"></span><span>    </span><span id="local-6989586621681049531"><span class="annot"><span class="annottext">init_offset :: ByteOff
</span><a href="#local-6989586621681049531"><span class="hs-identifier hs-var hs-var">init_offset</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Width -&gt; ByteOff
</span><a href="GHC.Cmm.Type.html#widthInBytes"><span class="hs-identifier hs-var">widthInBytes</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Platform -&gt; Width
</span><a href="GHC.Cmm.Type.html#wordWidth"><span class="hs-identifier hs-var">wordWidth</span></a></span><span> </span><span class="annot"><span class="annottext">Platform
</span><a href="#local-6989586621681049564"><span class="hs-identifier hs-var">platform</span></a></span><span class="hs-special">)</span><span> </span><span class="hs-comment">-- infotable</span><span>
</span><span id="line-346"></span><span>
</span><span id="line-347"></span><span>    </span><span class="hs-special">(</span><span id="local-6989586621681049529"><span class="annot"><span class="annottext">ByteOff
</span><a href="#local-6989586621681049529"><span class="hs-identifier hs-var">stk_off</span></a></span></span><span class="hs-special">,</span><span> </span><span id="local-6989586621681049565"><span class="annot"><span class="annottext">[(CmmFormal, ParamLocation)]
</span><a href="#local-6989586621681049565"><span class="hs-identifier hs-var">stk_args</span></a></span></span><span class="hs-special">)</span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Platform
-&gt; ByteOff
-&gt; (CmmFormal -&gt; CmmType)
-&gt; [CmmFormal]
-&gt; (ByteOff, [(CmmFormal, ParamLocation)])
forall a.
Platform
-&gt; ByteOff
-&gt; (a -&gt; CmmType)
-&gt; [a]
-&gt; (ByteOff, [(a, ParamLocation)])
</span><a href="GHC.Cmm.CallConv.html#assignStack"><span class="hs-identifier hs-var">assignStack</span></a></span><span> </span><span class="annot"><span class="annottext">Platform
</span><a href="#local-6989586621681049564"><span class="hs-identifier hs-var">platform</span></a></span><span> </span><span class="annot"><span class="annottext">ByteOff
</span><a href="#local-6989586621681049531"><span class="hs-identifier hs-var">init_offset</span></a></span><span> </span><span class="annot"><span class="annottext">CmmFormal -&gt; CmmType
</span><a href="GHC.Cmm.Expr.html#localRegType"><span class="hs-identifier hs-var">localRegType</span></a></span><span> </span><span class="annot"><span class="annottext">[CmmFormal]
</span><a href="#local-6989586621681049571"><span class="hs-identifier hs-var">extra_stk</span></a></span><span>
</span><span id="line-348"></span><span>
</span><span id="line-349"></span><span>    </span><span class="hs-special">(</span><span id="local-6989586621681049570"><span class="annot"><span class="annottext">ByteOff
</span><a href="#local-6989586621681049570"><span class="hs-identifier hs-var">stk_size</span></a></span></span><span class="hs-special">,</span><span> </span><span id="local-6989586621681049567"><span class="annot"><span class="annottext">[(CmmFormal, ParamLocation)]
</span><a href="#local-6989586621681049567"><span class="hs-identifier hs-var">args</span></a></span></span><span class="hs-special">)</span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">DynFlags
-&gt; ByteOff
-&gt; Convention
-&gt; (CmmFormal -&gt; CmmType)
-&gt; [CmmFormal]
-&gt; (ByteOff, [(CmmFormal, ParamLocation)])
forall a.
DynFlags
-&gt; ByteOff
-&gt; Convention
-&gt; (a -&gt; CmmType)
-&gt; [a]
-&gt; (ByteOff, [(a, ParamLocation)])
</span><a href="GHC.Cmm.CallConv.html#assignArgumentsPos"><span class="hs-identifier hs-var">assignArgumentsPos</span></a></span><span> </span><span class="annot"><span class="annottext">DynFlags
</span><a href="#local-6989586621681049575"><span class="hs-identifier hs-var">dflags</span></a></span><span> </span><span class="annot"><span class="annottext">ByteOff
</span><a href="#local-6989586621681049529"><span class="hs-identifier hs-var">stk_off</span></a></span><span> </span><span class="annot"><span class="annottext">Convention
</span><a href="#local-6989586621681049574"><span class="hs-identifier hs-var">conv</span></a></span><span>
</span><span id="line-350"></span><span>                                          </span><span class="annot"><span class="annottext">CmmFormal -&gt; CmmType
</span><a href="GHC.Cmm.Expr.html#localRegType"><span class="hs-identifier hs-var">localRegType</span></a></span><span> </span><span class="annot"><span class="annottext">[CmmFormal]
</span><a href="#local-6989586621681049572"><span class="hs-identifier hs-var">formals</span></a></span><span>
</span><span id="line-351"></span><span>
</span><span id="line-352"></span><span class="hs-comment">-- Factoring out the common parts of the copyout functions yielded something</span><span>
</span><span id="line-353"></span><span class="hs-comment">-- more complicated:</span><span>
</span><span id="line-354"></span><span>
</span><span id="line-355"></span><span class="hs-keyword">data</span><span> </span><span id="Transfer"><span class="annot"><a href="GHC.Cmm.Graph.html#Transfer"><span class="hs-identifier hs-var">Transfer</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span id="Call"><span class="annot"><a href="GHC.Cmm.Graph.html#Call"><span class="hs-identifier hs-var">Call</span></a></span></span><span> </span><span class="hs-glyph">|</span><span> </span><span id="JumpRet"><span class="annot"><a href="GHC.Cmm.Graph.html#JumpRet"><span class="hs-identifier hs-var">JumpRet</span></a></span></span><span> </span><span class="hs-glyph">|</span><span> </span><span id="Jump"><span class="annot"><a href="GHC.Cmm.Graph.html#Jump"><span class="hs-identifier hs-var">Jump</span></a></span></span><span> </span><span class="hs-glyph">|</span><span> </span><span id="Ret"><span class="annot"><a href="GHC.Cmm.Graph.html#Ret"><span class="hs-identifier hs-var">Ret</span></a></span></span><span> </span><span class="hs-keyword">deriving</span><span> </span><span id="local-6989586621681049523"><span id="local-6989586621681049525"><span class="annot"><span class="annottext">Transfer -&gt; Transfer -&gt; Bool
(Transfer -&gt; Transfer -&gt; Bool)
-&gt; (Transfer -&gt; Transfer -&gt; Bool) -&gt; Eq Transfer
forall a. (a -&gt; a -&gt; Bool) -&gt; (a -&gt; a -&gt; Bool) -&gt; Eq a
/= :: Transfer -&gt; Transfer -&gt; Bool
$c/= :: Transfer -&gt; Transfer -&gt; Bool
== :: Transfer -&gt; Transfer -&gt; Bool
$c== :: Transfer -&gt; Transfer -&gt; Bool
</span><span class="hs-identifier hs-var hs-var hs-var hs-var hs-var hs-var">Eq</span></span></span></span><span>
</span><span id="line-356"></span><span>
</span><span id="line-357"></span><span class="annot"><a href="GHC.Cmm.Graph.html#copyOutOflow"><span class="hs-identifier hs-type">copyOutOflow</span></a></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="GHC.Driver.Session.html#DynFlags"><span class="hs-identifier hs-type">DynFlags</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Cmm.Node.html#Convention"><span class="hs-identifier hs-type">Convention</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Cmm.Graph.html#Transfer"><span class="hs-identifier hs-type">Transfer</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Cmm.Expr.html#Area"><span class="hs-identifier hs-type">Area</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="hs-special">[</span><span class="annot"><a href="GHC.Cmm.Expr.html#CmmExpr"><span class="hs-identifier hs-type">CmmExpr</span></a></span><span class="hs-special">]</span><span>
</span><span id="line-358"></span><span>             </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Cmm.Node.html#UpdFrameOffset"><span class="hs-identifier hs-type">UpdFrameOffset</span></a></span><span>
</span><span id="line-359"></span><span>             </span><span class="hs-glyph">-&gt;</span><span> </span><span class="hs-special">[</span><span class="annot"><a href="GHC.Cmm.Expr.html#CmmExpr"><span class="hs-identifier hs-type">CmmExpr</span></a></span><span class="hs-special">]</span><span> </span><span class="hs-comment">-- extra stack args</span><span>
</span><span id="line-360"></span><span>             </span><span class="hs-glyph">-&gt;</span><span> </span><span class="hs-special">(</span><span class="annot"><span class="hs-identifier hs-type">Int</span></span><span class="hs-special">,</span><span> </span><span class="hs-special">[</span><span class="annot"><a href="GHC.Cmm.Expr.html#GlobalReg"><span class="hs-identifier hs-type">GlobalReg</span></a></span><span class="hs-special">]</span><span class="hs-special">,</span><span> </span><span class="annot"><a href="GHC.Cmm.Graph.html#CmmAGraph"><span class="hs-identifier hs-type">CmmAGraph</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-361"></span><span>
</span><span id="line-362"></span><span class="hs-comment">-- Generate code to move the actual parameters into the locations</span><span>
</span><span id="line-363"></span><span class="hs-comment">-- required by the calling convention.  This includes a store for the</span><span>
</span><span id="line-364"></span><span class="hs-comment">-- return address.</span><span>
</span><span id="line-365"></span><span class="hs-comment">--</span><span>
</span><span id="line-366"></span><span class="hs-comment">-- The argument layout function ignores the pointer to the info table,</span><span>
</span><span id="line-367"></span><span class="hs-comment">-- so we slot that in here. When copying-out to a young area, we set</span><span>
</span><span id="line-368"></span><span class="hs-comment">-- the info table for return and adjust the offsets of the other</span><span>
</span><span id="line-369"></span><span class="hs-comment">-- parameters.  If this is a call instruction, we adjust the offsets</span><span>
</span><span id="line-370"></span><span class="hs-comment">-- of the other parameters.</span><span>
</span><span id="line-371"></span><span id="copyOutOflow"><span class="annot"><span class="annottext">copyOutOflow :: DynFlags
-&gt; Convention
-&gt; Transfer
-&gt; Area
-&gt; [CmmExpr]
-&gt; ByteOff
-&gt; [CmmExpr]
-&gt; (ByteOff, [GlobalReg], CmmAGraph)
</span><a href="GHC.Cmm.Graph.html#copyOutOflow"><span class="hs-identifier hs-var hs-var">copyOutOflow</span></a></span></span><span> </span><span id="local-6989586621681049521"><span class="annot"><span class="annottext">DynFlags
</span><a href="#local-6989586621681049521"><span class="hs-identifier hs-var">dflags</span></a></span></span><span> </span><span id="local-6989586621681049520"><span class="annot"><span class="annottext">Convention
</span><a href="#local-6989586621681049520"><span class="hs-identifier hs-var">conv</span></a></span></span><span> </span><span id="local-6989586621681049519"><span class="annot"><span class="annottext">Transfer
</span><a href="#local-6989586621681049519"><span class="hs-identifier hs-var">transfer</span></a></span></span><span> </span><span id="local-6989586621681049518"><span class="annot"><span class="annottext">Area
</span><a href="#local-6989586621681049518"><span class="hs-identifier hs-var">area</span></a></span></span><span> </span><span id="local-6989586621681049517"><span class="annot"><span class="annottext">[CmmExpr]
</span><a href="#local-6989586621681049517"><span class="hs-identifier hs-var">actuals</span></a></span></span><span> </span><span id="local-6989586621681049516"><span class="annot"><span class="annottext">ByteOff
</span><a href="#local-6989586621681049516"><span class="hs-identifier hs-var">updfr_off</span></a></span></span><span> </span><span id="local-6989586621681049515"><span class="annot"><span class="annottext">[CmmExpr]
</span><a href="#local-6989586621681049515"><span class="hs-identifier hs-var">extra_stack_stuff</span></a></span></span><span>
</span><span id="line-372"></span><span>  </span><span class="hs-glyph">=</span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">ByteOff
</span><a href="#local-6989586621681049514"><span class="hs-identifier hs-var">stk_size</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><span class="annottext">[GlobalReg]
</span><a href="#local-6989586621681049513"><span class="hs-identifier hs-var">regs</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><span class="annottext">CmmAGraph
</span><a href="#local-6989586621681049512"><span class="hs-identifier hs-var">graph</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-373"></span><span>  </span><span class="hs-keyword">where</span><span>
</span><span id="line-374"></span><span>    </span><span id="local-6989586621681049511"><span class="annot"><span class="annottext">platform :: Platform
</span><a href="#local-6989586621681049511"><span class="hs-identifier hs-var hs-var">platform</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">DynFlags -&gt; Platform
</span><a href="GHC.Driver.Session.html#targetPlatform"><span class="hs-identifier hs-var hs-var">targetPlatform</span></a></span><span> </span><span class="annot"><span class="annottext">DynFlags
</span><a href="#local-6989586621681049521"><span class="hs-identifier hs-var">dflags</span></a></span><span>
</span><span id="line-375"></span><span>    </span><span class="hs-special">(</span><span id="local-6989586621681049513"><span class="annot"><span class="annottext">[GlobalReg]
</span><a href="#local-6989586621681049513"><span class="hs-identifier hs-var">regs</span></a></span></span><span class="hs-special">,</span><span> </span><span id="local-6989586621681049512"><span class="annot"><span class="annottext">CmmAGraph
</span><a href="#local-6989586621681049512"><span class="hs-identifier hs-var">graph</span></a></span></span><span class="hs-special">)</span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">((CmmExpr, ParamLocation)
 -&gt; ([GlobalReg], CmmAGraph) -&gt; ([GlobalReg], CmmAGraph))
-&gt; ([GlobalReg], CmmAGraph)
-&gt; [(CmmExpr, ParamLocation)]
-&gt; ([GlobalReg], CmmAGraph)
forall (t :: * -&gt; *) a b.
Foldable t =&gt;
(a -&gt; b -&gt; b) -&gt; b -&gt; t a -&gt; b
</span><a href="../../base/src/Data.Foldable.html#foldr"><span class="hs-identifier hs-var">foldr</span></a></span><span> </span><span class="annot"><span class="annottext">(CmmExpr, ParamLocation)
-&gt; ([GlobalReg], CmmAGraph) -&gt; ([GlobalReg], CmmAGraph)
</span><a href="#local-6989586621681049510"><span class="hs-identifier hs-var">co</span></a></span><span> </span><span class="hs-special">(</span><span class="hs-special">[</span><span class="hs-special">]</span><span class="hs-special">,</span><span> </span><span class="annot"><span class="annottext">CmmAGraph
</span><a href="GHC.Cmm.Graph.html#mkNop"><span class="hs-identifier hs-var">mkNop</span></a></span><span class="hs-special">)</span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">[(CmmExpr, ParamLocation)]
</span><a href="#local-6989586621681049509"><span class="hs-identifier hs-var">setRA</span></a></span><span> </span><span class="annot"><span class="annottext">[(CmmExpr, ParamLocation)]
-&gt; [(CmmExpr, ParamLocation)] -&gt; [(CmmExpr, ParamLocation)]
forall a. [a] -&gt; [a] -&gt; [a]
</span><a href="../../base/src/GHC.Base.html#%2B%2B"><span class="hs-operator hs-var">++</span></a></span><span> </span><span class="annot"><span class="annottext">[(CmmExpr, ParamLocation)]
</span><a href="#local-6989586621681049508"><span class="hs-identifier hs-var">args</span></a></span><span> </span><span class="annot"><span class="annottext">[(CmmExpr, ParamLocation)]
-&gt; [(CmmExpr, ParamLocation)] -&gt; [(CmmExpr, ParamLocation)]
forall a. [a] -&gt; [a] -&gt; [a]
</span><a href="../../base/src/GHC.Base.html#%2B%2B"><span class="hs-operator hs-var">++</span></a></span><span> </span><span class="annot"><span class="annottext">[(CmmExpr, ParamLocation)]
</span><a href="#local-6989586621681049507"><span class="hs-identifier hs-var">stack_params</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-376"></span><span>
</span><span id="line-377"></span><span>    </span><span class="hs-comment">-- See Note [Width of parameters]</span><span>
</span><span id="line-378"></span><span>    </span><span id="local-6989586621681049510"><span class="annot"><span class="annottext">co :: (CmmExpr, ParamLocation)
-&gt; ([GlobalReg], CmmAGraph) -&gt; ([GlobalReg], CmmAGraph)
</span><a href="#local-6989586621681049510"><span class="hs-identifier hs-var hs-var">co</span></a></span></span><span> </span><span class="hs-special">(</span><span id="local-6989586621681049506"><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681049506"><span class="hs-identifier hs-var">v</span></a></span></span><span class="hs-special">,</span><span> </span><span class="annot"><a href="GHC.Cmm.CallConv.html#RegisterParam"><span class="hs-identifier hs-type">RegisterParam</span></a></span><span> </span><span id="local-6989586621681049505"><span class="annot"><span class="annottext">r :: GlobalReg
</span><a href="#local-6989586621681049505"><span class="hs-identifier hs-var">r</span></a></span></span><span class="hs-glyph">@</span><span class="hs-special">(</span><span class="annot"><a href="GHC.Cmm.Expr.html#VanillaReg"><span class="hs-identifier hs-type">VanillaReg</span></a></span><span> </span><span class="hs-special">{</span><span class="hs-special">}</span><span class="hs-special">)</span><span class="hs-special">)</span><span> </span><span class="hs-special">(</span><span id="local-6989586621681049504"><span class="annot"><span class="annottext">[GlobalReg]
</span><a href="#local-6989586621681049504"><span class="hs-identifier hs-var">rs</span></a></span></span><span class="hs-special">,</span><span> </span><span id="local-6989586621681049503"><span class="annot"><span class="annottext">CmmAGraph
</span><a href="#local-6989586621681049503"><span class="hs-identifier hs-var">ms</span></a></span></span><span class="hs-special">)</span><span> </span><span class="hs-glyph">=</span><span>
</span><span id="line-379"></span><span>        </span><span class="hs-keyword">let</span><span> </span><span id="local-6989586621681049502"><span class="annot"><span class="annottext">width :: Width
</span><a href="#local-6989586621681049502"><span class="hs-identifier hs-var hs-var">width</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Platform -&gt; CmmExpr -&gt; Width
</span><a href="GHC.Cmm.Expr.html#cmmExprWidth"><span class="hs-identifier hs-var">cmmExprWidth</span></a></span><span> </span><span class="annot"><span class="annottext">Platform
</span><a href="#local-6989586621681049511"><span class="hs-identifier hs-var">platform</span></a></span><span> </span><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681049506"><span class="hs-identifier hs-var">v</span></a></span><span>
</span><span id="line-380"></span><span>            </span><span id="local-6989586621681049500"><span class="annot"><span class="annottext">value :: CmmExpr
</span><a href="#local-6989586621681049500"><span class="hs-identifier hs-var hs-var">value</span></a></span></span><span>
</span><span id="line-381"></span><span>                </span><span class="hs-glyph">|</span><span> </span><span class="annot"><span class="annottext">Width
</span><a href="#local-6989586621681049502"><span class="hs-identifier hs-var">width</span></a></span><span> </span><span class="annot"><span class="annottext">Width -&gt; Width -&gt; Bool
forall a. Eq a =&gt; a -&gt; a -&gt; Bool
</span><span class="hs-operator hs-var">==</span></span><span> </span><span class="annot"><span class="annottext">Platform -&gt; Width
</span><a href="GHC.Cmm.Type.html#wordWidth"><span class="hs-identifier hs-var">wordWidth</span></a></span><span> </span><span class="annot"><span class="annottext">Platform
</span><a href="#local-6989586621681049511"><span class="hs-identifier hs-var">platform</span></a></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681049506"><span class="hs-identifier hs-var">v</span></a></span><span>
</span><span id="line-382"></span><span>                </span><span class="hs-glyph">|</span><span> </span><span class="annot"><span class="annottext">Width
</span><a href="#local-6989586621681049502"><span class="hs-identifier hs-var">width</span></a></span><span> </span><span class="annot"><span class="annottext">Width -&gt; Width -&gt; Bool
forall a. Ord a =&gt; a -&gt; a -&gt; Bool
</span><span class="hs-operator hs-var">&lt;</span></span><span> </span><span class="annot"><span class="annottext">Platform -&gt; Width
</span><a href="GHC.Cmm.Type.html#wordWidth"><span class="hs-identifier hs-var">wordWidth</span></a></span><span> </span><span class="annot"><span class="annottext">Platform
</span><a href="#local-6989586621681049511"><span class="hs-identifier hs-var">platform</span></a></span><span> </span><span class="hs-glyph">=</span><span>
</span><span id="line-383"></span><span>                    </span><span class="annot"><span class="annottext">MachOp -&gt; [CmmExpr] -&gt; CmmExpr
</span><a href="GHC.Cmm.Expr.html#CmmMachOp"><span class="hs-identifier hs-var">CmmMachOp</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Width -&gt; Width -&gt; MachOp
</span><a href="GHC.Cmm.MachOp.html#MO_XX_Conv"><span class="hs-identifier hs-var">MO_XX_Conv</span></a></span><span> </span><span class="annot"><span class="annottext">Width
</span><a href="#local-6989586621681049502"><span class="hs-identifier hs-var">width</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Platform -&gt; Width
</span><a href="GHC.Cmm.Type.html#wordWidth"><span class="hs-identifier hs-var">wordWidth</span></a></span><span> </span><span class="annot"><span class="annottext">Platform
</span><a href="#local-6989586621681049511"><span class="hs-identifier hs-var">platform</span></a></span><span class="hs-special">)</span><span class="hs-special">)</span><span> </span><span class="hs-special">[</span><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681049506"><span class="hs-identifier hs-var">v</span></a></span><span class="hs-special">]</span><span>
</span><span id="line-384"></span><span>                </span><span class="hs-glyph">|</span><span> </span><span class="annot"><span class="annottext">Bool
</span><a href="../../base/src/GHC.Base.html#otherwise"><span class="hs-identifier hs-var">otherwise</span></a></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">String -&gt; CmmExpr
forall a. String -&gt; a
</span><a href="GHC.Utils.Panic.Plain.html#panic"><span class="hs-identifier hs-var">panic</span></a></span><span> </span><span class="annot"><span class="annottext">String
</span><span class="hs-string">&quot;Parameter width greater than word width&quot;</span></span><span>
</span><span id="line-385"></span><span>
</span><span id="line-386"></span><span>        </span><span class="hs-keyword">in</span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">GlobalReg
</span><a href="#local-6989586621681049505"><span class="hs-identifier hs-var">r</span></a></span><span class="annot"><span class="annottext">GlobalReg -&gt; [GlobalReg] -&gt; [GlobalReg]
forall a. a -&gt; [a] -&gt; [a]
</span><span class="hs-glyph hs-var">:</span></span><span class="annot"><span class="annottext">[GlobalReg]
</span><a href="#local-6989586621681049504"><span class="hs-identifier hs-var">rs</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><span class="annottext">CmmReg -&gt; CmmExpr -&gt; CmmAGraph
</span><a href="GHC.Cmm.Graph.html#mkAssign"><span class="hs-identifier hs-var">mkAssign</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">GlobalReg -&gt; CmmReg
</span><a href="GHC.Cmm.Expr.html#CmmGlobal"><span class="hs-identifier hs-var">CmmGlobal</span></a></span><span> </span><span class="annot"><span class="annottext">GlobalReg
</span><a href="#local-6989586621681049505"><span class="hs-identifier hs-var">r</span></a></span><span class="hs-special">)</span><span> </span><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681049500"><span class="hs-identifier hs-var">value</span></a></span><span> </span><span class="annot"><span class="annottext">CmmAGraph -&gt; CmmAGraph -&gt; CmmAGraph
</span><a href="GHC.Cmm.Graph.html#%3C%2A%3E"><span class="hs-operator hs-var">&lt;*&gt;</span></a></span><span> </span><span class="annot"><span class="annottext">CmmAGraph
</span><a href="#local-6989586621681049503"><span class="hs-identifier hs-var">ms</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-387"></span><span>
</span><span id="line-388"></span><span>    </span><span class="hs-comment">-- Non VanillaRegs</span><span>
</span><span id="line-389"></span><span>    </span><span class="annot"><a href="#local-6989586621681049510"><span class="hs-identifier hs-var">co</span></a></span><span> </span><span class="hs-special">(</span><span id="local-6989586621681049499"><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681049499"><span class="hs-identifier hs-var">v</span></a></span></span><span class="hs-special">,</span><span> </span><span class="annot"><a href="GHC.Cmm.CallConv.html#RegisterParam"><span class="hs-identifier hs-type">RegisterParam</span></a></span><span> </span><span id="local-6989586621681049498"><span class="annot"><span class="annottext">GlobalReg
</span><a href="#local-6989586621681049498"><span class="hs-identifier hs-var">r</span></a></span></span><span class="hs-special">)</span><span> </span><span class="hs-special">(</span><span id="local-6989586621681049497"><span class="annot"><span class="annottext">[GlobalReg]
</span><a href="#local-6989586621681049497"><span class="hs-identifier hs-var">rs</span></a></span></span><span class="hs-special">,</span><span> </span><span id="local-6989586621681049496"><span class="annot"><span class="annottext">CmmAGraph
</span><a href="#local-6989586621681049496"><span class="hs-identifier hs-var">ms</span></a></span></span><span class="hs-special">)</span><span> </span><span class="hs-glyph">=</span><span>
</span><span id="line-390"></span><span>        </span><span class="hs-special">(</span><span class="annot"><span class="annottext">GlobalReg
</span><a href="#local-6989586621681049498"><span class="hs-identifier hs-var">r</span></a></span><span class="annot"><span class="annottext">GlobalReg -&gt; [GlobalReg] -&gt; [GlobalReg]
forall a. a -&gt; [a] -&gt; [a]
</span><span class="hs-glyph hs-var">:</span></span><span class="annot"><span class="annottext">[GlobalReg]
</span><a href="#local-6989586621681049497"><span class="hs-identifier hs-var">rs</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><span class="annottext">CmmReg -&gt; CmmExpr -&gt; CmmAGraph
</span><a href="GHC.Cmm.Graph.html#mkAssign"><span class="hs-identifier hs-var">mkAssign</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">GlobalReg -&gt; CmmReg
</span><a href="GHC.Cmm.Expr.html#CmmGlobal"><span class="hs-identifier hs-var">CmmGlobal</span></a></span><span> </span><span class="annot"><span class="annottext">GlobalReg
</span><a href="#local-6989586621681049498"><span class="hs-identifier hs-var">r</span></a></span><span class="hs-special">)</span><span> </span><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681049499"><span class="hs-identifier hs-var">v</span></a></span><span> </span><span class="annot"><span class="annottext">CmmAGraph -&gt; CmmAGraph -&gt; CmmAGraph
</span><a href="GHC.Cmm.Graph.html#%3C%2A%3E"><span class="hs-operator hs-var">&lt;*&gt;</span></a></span><span> </span><span class="annot"><span class="annottext">CmmAGraph
</span><a href="#local-6989586621681049496"><span class="hs-identifier hs-var">ms</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-391"></span><span>
</span><span id="line-392"></span><span>    </span><span class="hs-comment">-- See Note [Width of parameters]</span><span>
</span><span id="line-393"></span><span>    </span><span class="annot"><a href="#local-6989586621681049510"><span class="hs-identifier hs-var">co</span></a></span><span> </span><span class="hs-special">(</span><span id="local-6989586621681049495"><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681049495"><span class="hs-identifier hs-var">v</span></a></span></span><span class="hs-special">,</span><span> </span><span class="annot"><a href="GHC.Cmm.CallConv.html#StackParam"><span class="hs-identifier hs-type">StackParam</span></a></span><span> </span><span id="local-6989586621681049494"><span class="annot"><span class="annottext">ByteOff
</span><a href="#local-6989586621681049494"><span class="hs-identifier hs-var">off</span></a></span></span><span class="hs-special">)</span><span>  </span><span class="hs-special">(</span><span id="local-6989586621681049493"><span class="annot"><span class="annottext">[GlobalReg]
</span><a href="#local-6989586621681049493"><span class="hs-identifier hs-var">rs</span></a></span></span><span class="hs-special">,</span><span> </span><span id="local-6989586621681049492"><span class="annot"><span class="annottext">CmmAGraph
</span><a href="#local-6989586621681049492"><span class="hs-identifier hs-var">ms</span></a></span></span><span class="hs-special">)</span><span>
</span><span id="line-394"></span><span>      </span><span class="hs-glyph">=</span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">[GlobalReg]
</span><a href="#local-6989586621681049493"><span class="hs-identifier hs-var">rs</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><span class="annottext">CmmExpr -&gt; CmmExpr -&gt; CmmAGraph
</span><a href="GHC.Cmm.Graph.html#mkStore"><span class="hs-identifier hs-var">mkStore</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Area -&gt; ByteOff -&gt; CmmExpr
</span><a href="GHC.Cmm.Expr.html#CmmStackSlot"><span class="hs-identifier hs-var">CmmStackSlot</span></a></span><span> </span><span class="annot"><span class="annottext">Area
</span><a href="#local-6989586621681049518"><span class="hs-identifier hs-var">area</span></a></span><span> </span><span class="annot"><span class="annottext">ByteOff
</span><a href="#local-6989586621681049494"><span class="hs-identifier hs-var">off</span></a></span><span class="hs-special">)</span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">CmmExpr -&gt; CmmExpr
</span><a href="#local-6989586621681049491"><span class="hs-identifier hs-var">value</span></a></span><span> </span><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681049495"><span class="hs-identifier hs-var">v</span></a></span><span class="hs-special">)</span><span> </span><span class="annot"><span class="annottext">CmmAGraph -&gt; CmmAGraph -&gt; CmmAGraph
</span><a href="GHC.Cmm.Graph.html#%3C%2A%3E"><span class="hs-operator hs-var">&lt;*&gt;</span></a></span><span> </span><span class="annot"><span class="annottext">CmmAGraph
</span><a href="#local-6989586621681049492"><span class="hs-identifier hs-var">ms</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-395"></span><span>
</span><span id="line-396"></span><span>    </span><span id="local-6989586621681049490"><span class="annot"><span class="annottext">width :: CmmExpr -&gt; Width
</span><a href="#local-6989586621681049490"><span class="hs-identifier hs-var hs-var">width</span></a></span></span><span> </span><span id="local-6989586621681049489"><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681049489"><span class="hs-identifier hs-var">v</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">Platform -&gt; CmmExpr -&gt; Width
</span><a href="GHC.Cmm.Expr.html#cmmExprWidth"><span class="hs-identifier hs-var">cmmExprWidth</span></a></span><span> </span><span class="annot"><span class="annottext">Platform
</span><a href="#local-6989586621681049511"><span class="hs-identifier hs-var">platform</span></a></span><span> </span><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681049489"><span class="hs-identifier hs-var">v</span></a></span><span>
</span><span id="line-397"></span><span>    </span><span id="local-6989586621681049491"><span class="annot"><span class="annottext">value :: CmmExpr -&gt; CmmExpr
</span><a href="#local-6989586621681049491"><span class="hs-identifier hs-var hs-var">value</span></a></span></span><span> </span><span id="local-6989586621681049488"><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681049488"><span class="hs-identifier hs-var">v</span></a></span></span><span>
</span><span id="line-398"></span><span>      </span><span class="hs-glyph">|</span><span> </span><span class="annot"><span class="annottext">CmmType -&gt; Bool
</span><a href="GHC.Cmm.Type.html#isBitsType"><span class="hs-identifier hs-var">isBitsType</span></a></span><span> </span><span class="annot"><span class="annottext">(CmmType -&gt; Bool) -&gt; CmmType -&gt; Bool
forall a b. (a -&gt; b) -&gt; a -&gt; b
</span><a href="../../base/src/GHC.Base.html#%24"><span class="hs-operator hs-var">$</span></a></span><span> </span><span class="annot"><span class="annottext">Platform -&gt; CmmExpr -&gt; CmmType
</span><a href="GHC.Cmm.Expr.html#cmmExprType"><span class="hs-identifier hs-var">cmmExprType</span></a></span><span> </span><span class="annot"><span class="annottext">Platform
</span><a href="#local-6989586621681049511"><span class="hs-identifier hs-var">platform</span></a></span><span> </span><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681049488"><span class="hs-identifier hs-var">v</span></a></span><span>
</span><span id="line-399"></span><span>      </span><span class="hs-special">,</span><span> </span><span class="annot"><span class="annottext">CmmExpr -&gt; Width
</span><a href="#local-6989586621681049490"><span class="hs-identifier hs-var">width</span></a></span><span> </span><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681049488"><span class="hs-identifier hs-var">v</span></a></span><span> </span><span class="annot"><span class="annottext">Width -&gt; Width -&gt; Bool
forall a. Ord a =&gt; a -&gt; a -&gt; Bool
</span><span class="hs-operator hs-var">&lt;</span></span><span> </span><span class="annot"><span class="annottext">Platform -&gt; Width
</span><a href="GHC.Cmm.Type.html#wordWidth"><span class="hs-identifier hs-var">wordWidth</span></a></span><span> </span><span class="annot"><span class="annottext">Platform
</span><a href="#local-6989586621681049511"><span class="hs-identifier hs-var">platform</span></a></span><span> </span><span class="hs-glyph">=</span><span>
</span><span id="line-400"></span><span>        </span><span class="annot"><span class="annottext">MachOp -&gt; [CmmExpr] -&gt; CmmExpr
</span><a href="GHC.Cmm.Expr.html#CmmMachOp"><span class="hs-identifier hs-var">CmmMachOp</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Width -&gt; Width -&gt; MachOp
</span><a href="GHC.Cmm.MachOp.html#MO_XX_Conv"><span class="hs-identifier hs-var">MO_XX_Conv</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">CmmExpr -&gt; Width
</span><a href="#local-6989586621681049490"><span class="hs-identifier hs-var">width</span></a></span><span> </span><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681049488"><span class="hs-identifier hs-var">v</span></a></span><span class="hs-special">)</span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Platform -&gt; Width
</span><a href="GHC.Cmm.Type.html#wordWidth"><span class="hs-identifier hs-var">wordWidth</span></a></span><span> </span><span class="annot"><span class="annottext">Platform
</span><a href="#local-6989586621681049511"><span class="hs-identifier hs-var">platform</span></a></span><span class="hs-special">)</span><span class="hs-special">)</span><span> </span><span class="hs-special">[</span><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681049488"><span class="hs-identifier hs-var">v</span></a></span><span class="hs-special">]</span><span>
</span><span id="line-401"></span><span>      </span><span class="hs-glyph">|</span><span> </span><span class="annot"><span class="annottext">Bool
</span><a href="../../base/src/GHC.Base.html#otherwise"><span class="hs-identifier hs-var">otherwise</span></a></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681049488"><span class="hs-identifier hs-var">v</span></a></span><span>
</span><span id="line-402"></span><span>
</span><span id="line-403"></span><span>    </span><span class="hs-special">(</span><span id="local-6989586621681049509"><span class="annot"><span class="annottext">[(CmmExpr, ParamLocation)]
</span><a href="#local-6989586621681049509"><span class="hs-identifier hs-var">setRA</span></a></span></span><span class="hs-special">,</span><span> </span><span id="local-6989586621681049486"><span class="annot"><span class="annottext">ByteOff
</span><a href="#local-6989586621681049486"><span class="hs-identifier hs-var">init_offset</span></a></span></span><span class="hs-special">)</span><span> </span><span class="hs-glyph">=</span><span>
</span><span id="line-404"></span><span>      </span><span class="hs-keyword">case</span><span> </span><span class="annot"><span class="annottext">Area
</span><a href="#local-6989586621681049518"><span class="hs-identifier hs-var">area</span></a></span><span> </span><span class="hs-keyword">of</span><span>
</span><span id="line-405"></span><span>            </span><span class="annot"><a href="GHC.Cmm.Expr.html#Young"><span class="hs-identifier hs-type">Young</span></a></span><span> </span><span id="local-6989586621681049485"><span class="annot"><span class="annottext">BlockId
</span><a href="#local-6989586621681049485"><span class="hs-identifier hs-var">id</span></a></span></span><span> </span><span class="hs-glyph">-&gt;</span><span>  </span><span class="hs-comment">-- Generate a store instruction for</span><span>
</span><span id="line-406"></span><span>                         </span><span class="hs-comment">-- the return address if making a call</span><span>
</span><span id="line-407"></span><span>                  </span><span class="hs-keyword">case</span><span> </span><span class="annot"><span class="annottext">Transfer
</span><a href="#local-6989586621681049519"><span class="hs-identifier hs-var">transfer</span></a></span><span> </span><span class="hs-keyword">of</span><span>
</span><span id="line-408"></span><span>                     </span><span class="annot"><span class="annottext">Transfer
</span><a href="GHC.Cmm.Graph.html#Call"><span class="hs-identifier hs-var">Call</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span>
</span><span id="line-409"></span><span>                       </span><span class="hs-special">(</span><span class="hs-special">[</span><span class="hs-special">(</span><span class="annot"><span class="annottext">CmmLit -&gt; CmmExpr
</span><a href="GHC.Cmm.Expr.html#CmmLit"><span class="hs-identifier hs-var">CmmLit</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">BlockId -&gt; CmmLit
</span><a href="GHC.Cmm.Expr.html#CmmBlock"><span class="hs-identifier hs-var">CmmBlock</span></a></span><span> </span><span class="annot"><span class="annottext">BlockId
</span><a href="#local-6989586621681049485"><span class="hs-identifier hs-var">id</span></a></span><span class="hs-special">)</span><span class="hs-special">,</span><span> </span><span class="annot"><span class="annottext">ByteOff -&gt; ParamLocation
</span><a href="GHC.Cmm.CallConv.html#StackParam"><span class="hs-identifier hs-var">StackParam</span></a></span><span> </span><span class="annot"><span class="annottext">ByteOff
</span><a href="#local-6989586621681049486"><span class="hs-identifier hs-var">init_offset</span></a></span><span class="hs-special">)</span><span class="hs-special">]</span><span class="hs-special">,</span><span>
</span><span id="line-410"></span><span>                       </span><span class="annot"><span class="annottext">Width -&gt; ByteOff
</span><a href="GHC.Cmm.Type.html#widthInBytes"><span class="hs-identifier hs-var">widthInBytes</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Platform -&gt; Width
</span><a href="GHC.Cmm.Type.html#wordWidth"><span class="hs-identifier hs-var">wordWidth</span></a></span><span> </span><span class="annot"><span class="annottext">Platform
</span><a href="#local-6989586621681049511"><span class="hs-identifier hs-var">platform</span></a></span><span class="hs-special">)</span><span class="hs-special">)</span><span>
</span><span id="line-411"></span><span>                     </span><span class="annot"><span class="annottext">Transfer
</span><a href="GHC.Cmm.Graph.html#JumpRet"><span class="hs-identifier hs-var">JumpRet</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span>
</span><span id="line-412"></span><span>                       </span><span class="hs-special">(</span><span class="hs-special">[</span><span class="hs-special">]</span><span class="hs-special">,</span><span>
</span><span id="line-413"></span><span>                       </span><span class="annot"><span class="annottext">Width -&gt; ByteOff
</span><a href="GHC.Cmm.Type.html#widthInBytes"><span class="hs-identifier hs-var">widthInBytes</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Platform -&gt; Width
</span><a href="GHC.Cmm.Type.html#wordWidth"><span class="hs-identifier hs-var">wordWidth</span></a></span><span> </span><span class="annot"><span class="annottext">Platform
</span><a href="#local-6989586621681049511"><span class="hs-identifier hs-var">platform</span></a></span><span class="hs-special">)</span><span class="hs-special">)</span><span>
</span><span id="line-414"></span><span>                     </span><span id="local-6989586621681049483"><span class="annot"><span class="annottext">Transfer
</span><a href="#local-6989586621681049483"><span class="hs-identifier hs-var">_other</span></a></span></span><span> </span><span class="hs-glyph">-&gt;</span><span>
</span><span id="line-415"></span><span>                       </span><span class="hs-special">(</span><span class="hs-special">[</span><span class="hs-special">]</span><span class="hs-special">,</span><span> </span><span class="annot"><span class="annottext">ByteOff
</span><span class="hs-number">0</span></span><span class="hs-special">)</span><span>
</span><span id="line-416"></span><span>            </span><span class="annot"><span class="annottext">Area
</span><a href="GHC.Cmm.Expr.html#Old"><span class="hs-identifier hs-var">Old</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="hs-special">(</span><span class="hs-special">[</span><span class="hs-special">]</span><span class="hs-special">,</span><span> </span><span class="annot"><span class="annottext">ByteOff
</span><a href="#local-6989586621681049516"><span class="hs-identifier hs-var">updfr_off</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-417"></span><span>
</span><span id="line-418"></span><span>    </span><span class="hs-special">(</span><span id="local-6989586621681049482"><span class="annot"><span class="annottext">ByteOff
</span><a href="#local-6989586621681049482"><span class="hs-identifier hs-var">extra_stack_off</span></a></span></span><span class="hs-special">,</span><span> </span><span id="local-6989586621681049507"><span class="annot"><span class="annottext">[(CmmExpr, ParamLocation)]
</span><a href="#local-6989586621681049507"><span class="hs-identifier hs-var">stack_params</span></a></span></span><span class="hs-special">)</span><span> </span><span class="hs-glyph">=</span><span>
</span><span id="line-419"></span><span>       </span><span class="annot"><span class="annottext">Platform
-&gt; ByteOff
-&gt; (CmmExpr -&gt; CmmType)
-&gt; [CmmExpr]
-&gt; (ByteOff, [(CmmExpr, ParamLocation)])
forall a.
Platform
-&gt; ByteOff
-&gt; (a -&gt; CmmType)
-&gt; [a]
-&gt; (ByteOff, [(a, ParamLocation)])
</span><a href="GHC.Cmm.CallConv.html#assignStack"><span class="hs-identifier hs-var">assignStack</span></a></span><span> </span><span class="annot"><span class="annottext">Platform
</span><a href="#local-6989586621681049511"><span class="hs-identifier hs-var">platform</span></a></span><span> </span><span class="annot"><span class="annottext">ByteOff
</span><a href="#local-6989586621681049486"><span class="hs-identifier hs-var">init_offset</span></a></span><span> </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Platform -&gt; CmmExpr -&gt; CmmType
</span><a href="GHC.Cmm.Expr.html#cmmExprType"><span class="hs-identifier hs-var">cmmExprType</span></a></span><span> </span><span class="annot"><span class="annottext">Platform
</span><a href="#local-6989586621681049511"><span class="hs-identifier hs-var">platform</span></a></span><span class="hs-special">)</span><span> </span><span class="annot"><span class="annottext">[CmmExpr]
</span><a href="#local-6989586621681049515"><span class="hs-identifier hs-var">extra_stack_stuff</span></a></span><span>
</span><span id="line-420"></span><span>
</span><span id="line-421"></span><span>    </span><span class="annot"><a href="#local-6989586621681049508"><span class="hs-identifier hs-type">args</span></a></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="hs-special">[</span><span class="hs-special">(</span><span class="annot"><a href="GHC.Cmm.Expr.html#CmmExpr"><span class="hs-identifier hs-type">CmmExpr</span></a></span><span class="hs-special">,</span><span> </span><span class="annot"><a href="GHC.Cmm.CallConv.html#ParamLocation"><span class="hs-identifier hs-type">ParamLocation</span></a></span><span class="hs-special">)</span><span class="hs-special">]</span><span>   </span><span class="hs-comment">-- The argument and where to put it</span><span>
</span><span id="line-422"></span><span>    </span><span class="hs-special">(</span><span id="local-6989586621681049514"><span class="annot"><span class="annottext">ByteOff
</span><a href="#local-6989586621681049514"><span class="hs-identifier hs-var">stk_size</span></a></span></span><span class="hs-special">,</span><span> </span><span id="local-6989586621681049508"><span class="annot"><span class="annottext">[(CmmExpr, ParamLocation)]
</span><a href="#local-6989586621681049508"><span class="hs-identifier hs-var">args</span></a></span></span><span class="hs-special">)</span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">DynFlags
-&gt; ByteOff
-&gt; Convention
-&gt; (CmmExpr -&gt; CmmType)
-&gt; [CmmExpr]
-&gt; (ByteOff, [(CmmExpr, ParamLocation)])
forall a.
DynFlags
-&gt; ByteOff
-&gt; Convention
-&gt; (a -&gt; CmmType)
-&gt; [a]
-&gt; (ByteOff, [(a, ParamLocation)])
</span><a href="GHC.Cmm.CallConv.html#assignArgumentsPos"><span class="hs-identifier hs-var">assignArgumentsPos</span></a></span><span> </span><span class="annot"><span class="annottext">DynFlags
</span><a href="#local-6989586621681049521"><span class="hs-identifier hs-var">dflags</span></a></span><span> </span><span class="annot"><span class="annottext">ByteOff
</span><a href="#local-6989586621681049482"><span class="hs-identifier hs-var">extra_stack_off</span></a></span><span> </span><span class="annot"><span class="annottext">Convention
</span><a href="#local-6989586621681049520"><span class="hs-identifier hs-var">conv</span></a></span><span>
</span><span id="line-423"></span><span>                                          </span><span class="hs-special">(</span><span class="annot"><span class="annottext">Platform -&gt; CmmExpr -&gt; CmmType
</span><a href="GHC.Cmm.Expr.html#cmmExprType"><span class="hs-identifier hs-var">cmmExprType</span></a></span><span> </span><span class="annot"><span class="annottext">Platform
</span><a href="#local-6989586621681049511"><span class="hs-identifier hs-var">platform</span></a></span><span class="hs-special">)</span><span> </span><span class="annot"><span class="annottext">[CmmExpr]
</span><a href="#local-6989586621681049517"><span class="hs-identifier hs-var">actuals</span></a></span><span>
</span><span id="line-424"></span><span>
</span><span id="line-425"></span><span>
</span><span id="line-426"></span><span class="hs-comment">-- Note [Width of parameters]</span><span>
</span><span id="line-427"></span><span class="hs-comment">--</span><span>
</span><span id="line-428"></span><span class="hs-comment">-- Consider passing a small (&lt; word width) primitive like Int8# to a function.</span><span>
</span><span id="line-429"></span><span class="hs-comment">-- It's actually non-trivial to do this without extending/narrowing:</span><span>
</span><span id="line-430"></span><span class="hs-comment">-- * Global registers are considered to have native word width (i.e., 64-bits on</span><span>
</span><span id="line-431"></span><span class="hs-comment">--   x86-64), so CmmLint would complain if we assigned an 8-bit parameter to a</span><span>
</span><span id="line-432"></span><span class="hs-comment">--   global register.</span><span>
</span><span id="line-433"></span><span class="hs-comment">-- * Same problem exists with LLVM IR.</span><span>
</span><span id="line-434"></span><span class="hs-comment">-- * Lowering gets harder since on x86-32 not every register exposes its lower</span><span>
</span><span id="line-435"></span><span class="hs-comment">--   8 bits (e.g., for %eax we can use %al, but there isn't a corresponding</span><span>
</span><span id="line-436"></span><span class="hs-comment">--   8-bit register for %edi). So we would either need to extend/narrow anyway,</span><span>
</span><span id="line-437"></span><span class="hs-comment">--   or complicate the calling convention.</span><span>
</span><span id="line-438"></span><span class="hs-comment">-- * Passing a small integer in a stack slot, which has native word width,</span><span>
</span><span id="line-439"></span><span class="hs-comment">--   requires extending to word width when writing to the stack and narrowing</span><span>
</span><span id="line-440"></span><span class="hs-comment">--   when reading off the stack (see #16258).</span><span>
</span><span id="line-441"></span><span class="hs-comment">-- So instead, we always extend every parameter smaller than native word width</span><span>
</span><span id="line-442"></span><span class="hs-comment">-- in copyOutOflow and then truncate it back to the expected width in copyIn.</span><span>
</span><span id="line-443"></span><span class="hs-comment">-- Note that we do this in cmm using MO_XX_Conv to avoid requiring</span><span>
</span><span id="line-444"></span><span class="hs-comment">-- zero-/sign-extending - it's up to a backend to handle this in a most</span><span>
</span><span id="line-445"></span><span class="hs-comment">-- efficient way (e.g., a simple register move or a smaller size store).</span><span>
</span><span id="line-446"></span><span class="hs-comment">-- This convention (of ignoring the upper bits) is different from some C ABIs,</span><span>
</span><span id="line-447"></span><span class="hs-comment">-- e.g. all PowerPC ELF ABIs, that require sign or zero extending parameters.</span><span>
</span><span id="line-448"></span><span class="hs-comment">--</span><span>
</span><span id="line-449"></span><span class="hs-comment">-- There was some discussion about this on this PR:</span><span>
</span><span id="line-450"></span><span class="hs-comment">-- https://github.com/ghc-proposals/ghc-proposals/pull/74</span><span>
</span><span id="line-451"></span><span>
</span><span id="line-452"></span><span>
</span><span id="line-453"></span><span class="annot"><a href="GHC.Cmm.Graph.html#mkCallEntry"><span class="hs-identifier hs-type">mkCallEntry</span></a></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="GHC.Driver.Session.html#DynFlags"><span class="hs-identifier hs-type">DynFlags</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Cmm.Node.html#Convention"><span class="hs-identifier hs-type">Convention</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="hs-special">[</span><span class="annot"><a href="GHC.Cmm.Node.html#CmmFormal"><span class="hs-identifier hs-type">CmmFormal</span></a></span><span class="hs-special">]</span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="hs-special">[</span><span class="annot"><a href="GHC.Cmm.Node.html#CmmFormal"><span class="hs-identifier hs-type">CmmFormal</span></a></span><span class="hs-special">]</span><span>
</span><span id="line-454"></span><span>            </span><span class="hs-glyph">-&gt;</span><span> </span><span class="hs-special">(</span><span class="annot"><span class="hs-identifier hs-type">Int</span></span><span class="hs-special">,</span><span> </span><span class="hs-special">[</span><span class="annot"><a href="GHC.Cmm.Expr.html#GlobalReg"><span class="hs-identifier hs-type">GlobalReg</span></a></span><span class="hs-special">]</span><span class="hs-special">,</span><span> </span><span class="annot"><a href="GHC.Cmm.Graph.html#CmmAGraph"><span class="hs-identifier hs-type">CmmAGraph</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-455"></span><span id="mkCallEntry"><span class="annot"><span class="annottext">mkCallEntry :: DynFlags
-&gt; Convention
-&gt; [CmmFormal]
-&gt; [CmmFormal]
-&gt; (ByteOff, [GlobalReg], CmmAGraph)
</span><a href="GHC.Cmm.Graph.html#mkCallEntry"><span class="hs-identifier hs-var hs-var">mkCallEntry</span></a></span></span><span> </span><span id="local-6989586621681049481"><span class="annot"><span class="annottext">DynFlags
</span><a href="#local-6989586621681049481"><span class="hs-identifier hs-var">dflags</span></a></span></span><span> </span><span id="local-6989586621681049480"><span class="annot"><span class="annottext">Convention
</span><a href="#local-6989586621681049480"><span class="hs-identifier hs-var">conv</span></a></span></span><span> </span><span id="local-6989586621681049479"><span class="annot"><span class="annottext">[CmmFormal]
</span><a href="#local-6989586621681049479"><span class="hs-identifier hs-var">formals</span></a></span></span><span> </span><span id="local-6989586621681049478"><span class="annot"><span class="annottext">[CmmFormal]
</span><a href="#local-6989586621681049478"><span class="hs-identifier hs-var">extra_stk</span></a></span></span><span>
</span><span id="line-456"></span><span>  </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">DynFlags
-&gt; Convention
-&gt; Area
-&gt; [CmmFormal]
-&gt; [CmmFormal]
-&gt; (ByteOff, [GlobalReg], CmmAGraph)
</span><a href="GHC.Cmm.Graph.html#copyInOflow"><span class="hs-identifier hs-var">copyInOflow</span></a></span><span> </span><span class="annot"><span class="annottext">DynFlags
</span><a href="#local-6989586621681049481"><span class="hs-identifier hs-var">dflags</span></a></span><span> </span><span class="annot"><span class="annottext">Convention
</span><a href="#local-6989586621681049480"><span class="hs-identifier hs-var">conv</span></a></span><span> </span><span class="annot"><span class="annottext">Area
</span><a href="GHC.Cmm.Expr.html#Old"><span class="hs-identifier hs-var">Old</span></a></span><span> </span><span class="annot"><span class="annottext">[CmmFormal]
</span><a href="#local-6989586621681049479"><span class="hs-identifier hs-var">formals</span></a></span><span> </span><span class="annot"><span class="annottext">[CmmFormal]
</span><a href="#local-6989586621681049478"><span class="hs-identifier hs-var">extra_stk</span></a></span><span>
</span><span id="line-457"></span><span>
</span><span id="line-458"></span><span class="annot"><a href="GHC.Cmm.Graph.html#lastWithArgs"><span class="hs-identifier hs-type">lastWithArgs</span></a></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="GHC.Driver.Session.html#DynFlags"><span class="hs-identifier hs-type">DynFlags</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Cmm.Graph.html#Transfer"><span class="hs-identifier hs-type">Transfer</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Cmm.Expr.html#Area"><span class="hs-identifier hs-type">Area</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Cmm.Node.html#Convention"><span class="hs-identifier hs-type">Convention</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="hs-special">[</span><span class="annot"><a href="GHC.Cmm.Expr.html#CmmExpr"><span class="hs-identifier hs-type">CmmExpr</span></a></span><span class="hs-special">]</span><span>
</span><span id="line-459"></span><span>             </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Cmm.Node.html#UpdFrameOffset"><span class="hs-identifier hs-type">UpdFrameOffset</span></a></span><span>
</span><span id="line-460"></span><span>             </span><span class="hs-glyph">-&gt;</span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.Runtime.Heap.Layout.html#ByteOff"><span class="hs-identifier hs-type">ByteOff</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="hs-special">[</span><span class="annot"><a href="GHC.Cmm.Expr.html#GlobalReg"><span class="hs-identifier hs-type">GlobalReg</span></a></span><span class="hs-special">]</span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Cmm.Graph.html#CmmAGraph"><span class="hs-identifier hs-type">CmmAGraph</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-461"></span><span>             </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Cmm.Graph.html#CmmAGraph"><span class="hs-identifier hs-type">CmmAGraph</span></a></span><span>
</span><span id="line-462"></span><span id="lastWithArgs"><span class="annot"><span class="annottext">lastWithArgs :: DynFlags
-&gt; Transfer
-&gt; Area
-&gt; Convention
-&gt; [CmmExpr]
-&gt; ByteOff
-&gt; (ByteOff -&gt; [GlobalReg] -&gt; CmmAGraph)
-&gt; CmmAGraph
</span><a href="GHC.Cmm.Graph.html#lastWithArgs"><span class="hs-identifier hs-var hs-var">lastWithArgs</span></a></span></span><span> </span><span id="local-6989586621681049477"><span class="annot"><span class="annottext">DynFlags
</span><a href="#local-6989586621681049477"><span class="hs-identifier hs-var">dflags</span></a></span></span><span> </span><span id="local-6989586621681049476"><span class="annot"><span class="annottext">Transfer
</span><a href="#local-6989586621681049476"><span class="hs-identifier hs-var">transfer</span></a></span></span><span> </span><span id="local-6989586621681049475"><span class="annot"><span class="annottext">Area
</span><a href="#local-6989586621681049475"><span class="hs-identifier hs-var">area</span></a></span></span><span> </span><span id="local-6989586621681049474"><span class="annot"><span class="annottext">Convention
</span><a href="#local-6989586621681049474"><span class="hs-identifier hs-var">conv</span></a></span></span><span> </span><span id="local-6989586621681049473"><span class="annot"><span class="annottext">[CmmExpr]
</span><a href="#local-6989586621681049473"><span class="hs-identifier hs-var">actuals</span></a></span></span><span> </span><span id="local-6989586621681049472"><span class="annot"><span class="annottext">ByteOff
</span><a href="#local-6989586621681049472"><span class="hs-identifier hs-var">updfr_off</span></a></span></span><span> </span><span id="local-6989586621681049471"><span class="annot"><span class="annottext">ByteOff -&gt; [GlobalReg] -&gt; CmmAGraph
</span><a href="#local-6989586621681049471"><span class="hs-identifier hs-var">last</span></a></span></span><span> </span><span class="hs-glyph">=</span><span>
</span><span id="line-463"></span><span>  </span><span class="annot"><span class="annottext">DynFlags
-&gt; Transfer
-&gt; Area
-&gt; Convention
-&gt; [CmmExpr]
-&gt; ByteOff
-&gt; [CmmExpr]
-&gt; (ByteOff -&gt; [GlobalReg] -&gt; CmmAGraph)
-&gt; CmmAGraph
</span><a href="GHC.Cmm.Graph.html#lastWithArgsAndExtraStack"><span class="hs-identifier hs-var">lastWithArgsAndExtraStack</span></a></span><span> </span><span class="annot"><span class="annottext">DynFlags
</span><a href="#local-6989586621681049477"><span class="hs-identifier hs-var">dflags</span></a></span><span> </span><span class="annot"><span class="annottext">Transfer
</span><a href="#local-6989586621681049476"><span class="hs-identifier hs-var">transfer</span></a></span><span> </span><span class="annot"><span class="annottext">Area
</span><a href="#local-6989586621681049475"><span class="hs-identifier hs-var">area</span></a></span><span> </span><span class="annot"><span class="annottext">Convention
</span><a href="#local-6989586621681049474"><span class="hs-identifier hs-var">conv</span></a></span><span> </span><span class="annot"><span class="annottext">[CmmExpr]
</span><a href="#local-6989586621681049473"><span class="hs-identifier hs-var">actuals</span></a></span><span>
</span><span id="line-464"></span><span>                            </span><span class="annot"><span class="annottext">ByteOff
</span><a href="#local-6989586621681049472"><span class="hs-identifier hs-var">updfr_off</span></a></span><span> </span><span class="annot"><span class="annottext">[CmmExpr]
</span><a href="GHC.Cmm.Graph.html#noExtraStack"><span class="hs-identifier hs-var">noExtraStack</span></a></span><span> </span><span class="annot"><span class="annottext">ByteOff -&gt; [GlobalReg] -&gt; CmmAGraph
</span><a href="#local-6989586621681049471"><span class="hs-identifier hs-var">last</span></a></span><span>
</span><span id="line-465"></span><span>
</span><span id="line-466"></span><span class="annot"><a href="GHC.Cmm.Graph.html#lastWithArgsAndExtraStack"><span class="hs-identifier hs-type">lastWithArgsAndExtraStack</span></a></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="GHC.Driver.Session.html#DynFlags"><span class="hs-identifier hs-type">DynFlags</span></a></span><span>
</span><span id="line-467"></span><span>             </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Cmm.Graph.html#Transfer"><span class="hs-identifier hs-type">Transfer</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Cmm.Expr.html#Area"><span class="hs-identifier hs-type">Area</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Cmm.Node.html#Convention"><span class="hs-identifier hs-type">Convention</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="hs-special">[</span><span class="annot"><a href="GHC.Cmm.Expr.html#CmmExpr"><span class="hs-identifier hs-type">CmmExpr</span></a></span><span class="hs-special">]</span><span>
</span><span id="line-468"></span><span>             </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Cmm.Node.html#UpdFrameOffset"><span class="hs-identifier hs-type">UpdFrameOffset</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="hs-special">[</span><span class="annot"><a href="GHC.Cmm.Expr.html#CmmExpr"><span class="hs-identifier hs-type">CmmExpr</span></a></span><span class="hs-special">]</span><span>
</span><span id="line-469"></span><span>             </span><span class="hs-glyph">-&gt;</span><span> </span><span class="hs-special">(</span><span class="annot"><a href="GHC.Runtime.Heap.Layout.html#ByteOff"><span class="hs-identifier hs-type">ByteOff</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="hs-special">[</span><span class="annot"><a href="GHC.Cmm.Expr.html#GlobalReg"><span class="hs-identifier hs-type">GlobalReg</span></a></span><span class="hs-special">]</span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Cmm.Graph.html#CmmAGraph"><span class="hs-identifier hs-type">CmmAGraph</span></a></span><span class="hs-special">)</span><span>
</span><span id="line-470"></span><span>             </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Cmm.Graph.html#CmmAGraph"><span class="hs-identifier hs-type">CmmAGraph</span></a></span><span>
</span><span id="line-471"></span><span id="lastWithArgsAndExtraStack"><span class="annot"><span class="annottext">lastWithArgsAndExtraStack :: DynFlags
-&gt; Transfer
-&gt; Area
-&gt; Convention
-&gt; [CmmExpr]
-&gt; ByteOff
-&gt; [CmmExpr]
-&gt; (ByteOff -&gt; [GlobalReg] -&gt; CmmAGraph)
-&gt; CmmAGraph
</span><a href="GHC.Cmm.Graph.html#lastWithArgsAndExtraStack"><span class="hs-identifier hs-var hs-var">lastWithArgsAndExtraStack</span></a></span></span><span> </span><span id="local-6989586621681049470"><span class="annot"><span class="annottext">DynFlags
</span><a href="#local-6989586621681049470"><span class="hs-identifier hs-var">dflags</span></a></span></span><span> </span><span id="local-6989586621681049469"><span class="annot"><span class="annottext">Transfer
</span><a href="#local-6989586621681049469"><span class="hs-identifier hs-var">transfer</span></a></span></span><span> </span><span id="local-6989586621681049468"><span class="annot"><span class="annottext">Area
</span><a href="#local-6989586621681049468"><span class="hs-identifier hs-var">area</span></a></span></span><span> </span><span id="local-6989586621681049467"><span class="annot"><span class="annottext">Convention
</span><a href="#local-6989586621681049467"><span class="hs-identifier hs-var">conv</span></a></span></span><span> </span><span id="local-6989586621681049466"><span class="annot"><span class="annottext">[CmmExpr]
</span><a href="#local-6989586621681049466"><span class="hs-identifier hs-var">actuals</span></a></span></span><span> </span><span id="local-6989586621681049465"><span class="annot"><span class="annottext">ByteOff
</span><a href="#local-6989586621681049465"><span class="hs-identifier hs-var">updfr_off</span></a></span></span><span>
</span><span id="line-472"></span><span>                          </span><span id="local-6989586621681049464"><span class="annot"><span class="annottext">[CmmExpr]
</span><a href="#local-6989586621681049464"><span class="hs-identifier hs-var">extra_stack</span></a></span></span><span> </span><span id="local-6989586621681049463"><span class="annot"><span class="annottext">ByteOff -&gt; [GlobalReg] -&gt; CmmAGraph
</span><a href="#local-6989586621681049463"><span class="hs-identifier hs-var">last</span></a></span></span><span> </span><span class="hs-glyph">=</span><span>
</span><span id="line-473"></span><span>  </span><span class="annot"><span class="annottext">CmmAGraph
</span><a href="#local-6989586621681049462"><span class="hs-identifier hs-var">copies</span></a></span><span> </span><span class="annot"><span class="annottext">CmmAGraph -&gt; CmmAGraph -&gt; CmmAGraph
</span><a href="GHC.Cmm.Graph.html#%3C%2A%3E"><span class="hs-operator hs-var">&lt;*&gt;</span></a></span><span> </span><span class="annot"><span class="annottext">ByteOff -&gt; [GlobalReg] -&gt; CmmAGraph
</span><a href="#local-6989586621681049463"><span class="hs-identifier hs-var">last</span></a></span><span> </span><span class="annot"><span class="annottext">ByteOff
</span><a href="#local-6989586621681049461"><span class="hs-identifier hs-var">outArgs</span></a></span><span> </span><span class="annot"><span class="annottext">[GlobalReg]
</span><a href="#local-6989586621681049460"><span class="hs-identifier hs-var">regs</span></a></span><span>
</span><span id="line-474"></span><span> </span><span class="hs-keyword">where</span><span>
</span><span id="line-475"></span><span>  </span><span class="hs-special">(</span><span id="local-6989586621681049461"><span class="annot"><span class="annottext">ByteOff
</span><a href="#local-6989586621681049461"><span class="hs-identifier hs-var">outArgs</span></a></span></span><span class="hs-special">,</span><span> </span><span id="local-6989586621681049460"><span class="annot"><span class="annottext">[GlobalReg]
</span><a href="#local-6989586621681049460"><span class="hs-identifier hs-var">regs</span></a></span></span><span class="hs-special">,</span><span> </span><span id="local-6989586621681049462"><span class="annot"><span class="annottext">CmmAGraph
</span><a href="#local-6989586621681049462"><span class="hs-identifier hs-var">copies</span></a></span></span><span class="hs-special">)</span><span> </span><span class="hs-glyph">=</span><span> </span><span class="annot"><span class="annottext">DynFlags
-&gt; Convention
-&gt; Transfer
-&gt; Area
-&gt; [CmmExpr]
-&gt; ByteOff
-&gt; [CmmExpr]
-&gt; (ByteOff, [GlobalReg], CmmAGraph)
</span><a href="GHC.Cmm.Graph.html#copyOutOflow"><span class="hs-identifier hs-var">copyOutOflow</span></a></span><span> </span><span class="annot"><span class="annottext">DynFlags
</span><a href="#local-6989586621681049470"><span class="hs-identifier hs-var">dflags</span></a></span><span> </span><span class="annot"><span class="annottext">Convention
</span><a href="#local-6989586621681049467"><span class="hs-identifier hs-var">conv</span></a></span><span> </span><span class="annot"><span class="annottext">Transfer
</span><a href="#local-6989586621681049469"><span class="hs-identifier hs-var">transfer</span></a></span><span> </span><span class="annot"><span class="annottext">Area
</span><a href="#local-6989586621681049468"><span class="hs-identifier hs-var">area</span></a></span><span> </span><span class="annot"><span class="annottext">[CmmExpr]
</span><a href="#local-6989586621681049466"><span class="hs-identifier hs-var">actuals</span></a></span><span>
</span><span id="line-476"></span><span>                               </span><span class="annot"><span class="annottext">ByteOff
</span><a href="#local-6989586621681049465"><span class="hs-identifier hs-var">updfr_off</span></a></span><span> </span><span class="annot"><span class="annottext">[CmmExpr]
</span><a href="#local-6989586621681049464"><span class="hs-identifier hs-var">extra_stack</span></a></span><span>
</span><span id="line-477"></span><span>
</span><span id="line-478"></span><span>
</span><span id="line-479"></span><span class="annot"><a href="GHC.Cmm.Graph.html#noExtraStack"><span class="hs-identifier hs-type">noExtraStack</span></a></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="hs-special">[</span><span class="annot"><a href="GHC.Cmm.Expr.html#CmmExpr"><span class="hs-identifier hs-type">CmmExpr</span></a></span><span class="hs-special">]</span><span>
</span><span id="line-480"></span><span id="noExtraStack"><span class="annot"><span class="annottext">noExtraStack :: [CmmExpr]
</span><a href="GHC.Cmm.Graph.html#noExtraStack"><span class="hs-identifier hs-var hs-var">noExtraStack</span></a></span></span><span> </span><span class="hs-glyph">=</span><span> </span><span class="hs-special">[</span><span class="hs-special">]</span><span>
</span><span id="line-481"></span><span>
</span><span id="line-482"></span><span class="annot"><a href="GHC.Cmm.Graph.html#toCall"><span class="hs-identifier hs-type">toCall</span></a></span><span> </span><span class="hs-glyph">::</span><span> </span><span class="annot"><a href="GHC.Cmm.Expr.html#CmmExpr"><span class="hs-identifier hs-type">CmmExpr</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="../../base/src/GHC.Maybe.html#Maybe"><span class="hs-identifier hs-type">Maybe</span></a></span><span> </span><span class="annot"><a href="GHC.Cmm.BlockId.html#BlockId"><span class="hs-identifier hs-type">BlockId</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Cmm.Node.html#UpdFrameOffset"><span class="hs-identifier hs-type">UpdFrameOffset</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Runtime.Heap.Layout.html#ByteOff"><span class="hs-identifier hs-type">ByteOff</span></a></span><span>
</span><span id="line-483"></span><span>       </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Runtime.Heap.Layout.html#ByteOff"><span class="hs-identifier hs-type">ByteOff</span></a></span><span> </span><span class="hs-glyph">-&gt;</span><span> </span><span class="hs-special">[</span><span class="annot"><a href="GHC.Cmm.Expr.html#GlobalReg"><span class="hs-identifier hs-type">GlobalReg</span></a></span><span class="hs-special">]</span><span>
</span><span id="line-484"></span><span>       </span><span class="hs-glyph">-&gt;</span><span> </span><span class="annot"><a href="GHC.Cmm.Graph.html#CmmAGraph"><span class="hs-identifier hs-type">CmmAGraph</span></a></span><span>
</span><span id="line-485"></span><span id="toCall"><span class="annot"><span class="annottext">toCall :: CmmExpr
-&gt; Maybe BlockId
-&gt; ByteOff
-&gt; ByteOff
-&gt; ByteOff
-&gt; [GlobalReg]
-&gt; CmmAGraph
</span><a href="GHC.Cmm.Graph.html#toCall"><span class="hs-identifier hs-var hs-var">toCall</span></a></span></span><span> </span><span id="local-6989586621681049459"><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681049459"><span class="hs-identifier hs-var">e</span></a></span></span><span> </span><span id="local-6989586621681049458"><span class="annot"><span class="annottext">Maybe BlockId
</span><a href="#local-6989586621681049458"><span class="hs-identifier hs-var">cont</span></a></span></span><span> </span><span id="local-6989586621681049457"><span class="annot"><span class="annottext">ByteOff
</span><a href="#local-6989586621681049457"><span class="hs-identifier hs-var">updfr_off</span></a></span></span><span> </span><span id="local-6989586621681049456"><span class="annot"><span class="annottext">ByteOff
</span><a href="#local-6989586621681049456"><span class="hs-identifier hs-var">res_space</span></a></span></span><span> </span><span id="local-6989586621681049455"><span class="annot"><span class="annottext">ByteOff
</span><a href="#local-6989586621681049455"><span class="hs-identifier hs-var">arg_space</span></a></span></span><span> </span><span id="local-6989586621681049454"><span class="annot"><span class="annottext">[GlobalReg]
</span><a href="#local-6989586621681049454"><span class="hs-identifier hs-var">regs</span></a></span></span><span> </span><span class="hs-glyph">=</span><span>
</span><span id="line-486"></span><span>  </span><span class="annot"><span class="annottext">CmmNode O C -&gt; CmmAGraph
</span><a href="GHC.Cmm.Graph.html#mkLast"><span class="hs-identifier hs-var">mkLast</span></a></span><span> </span><span class="annot"><span class="annottext">(CmmNode O C -&gt; CmmAGraph) -&gt; CmmNode O C -&gt; CmmAGraph
forall a b. (a -&gt; b) -&gt; a -&gt; b
</span><a href="../../base/src/GHC.Base.html#%24"><span class="hs-operator hs-var">$</span></a></span><span> </span><span class="annot"><span class="annottext">CmmExpr
-&gt; Maybe BlockId
-&gt; [GlobalReg]
-&gt; ByteOff
-&gt; ByteOff
-&gt; ByteOff
-&gt; CmmNode O C
</span><a href="GHC.Cmm.Node.html#CmmCall"><span class="hs-identifier hs-var">CmmCall</span></a></span><span> </span><span class="annot"><span class="annottext">CmmExpr
</span><a href="#local-6989586621681049459"><span class="hs-identifier hs-var">e</span></a></span><span> </span><span class="annot"><span class="annottext">Maybe BlockId
</span><a href="#local-6989586621681049458"><span class="hs-identifier hs-var">cont</span></a></span><span> </span><span class="annot"><span class="annottext">[GlobalReg]
</span><a href="#local-6989586621681049454"><span class="hs-identifier hs-var">regs</span></a></span><span> </span><span class="annot"><span class="annottext">ByteOff
</span><a href="#local-6989586621681049455"><span class="hs-identifier hs-var">arg_space</span></a></span><span> </span><span class="annot"><span class="annottext">ByteOff
</span><a href="#local-6989586621681049456"><span class="hs-identifier hs-var">res_space</span></a></span><span> </span><span class="annot"><span class="annottext">ByteOff
</span><a href="#local-6989586621681049457"><span class="hs-identifier hs-var">updfr_off</span></a></span><span>
</span><span id="line-487"></span></pre></body></html>